2010-07-26 3 views
6

Was ist die einfachste/direkte Methode zum Festlegen eines Standardwerts für eine öffentliche C# Eigenschaft?C# Automatische Eigenschaften - Standardeinstellungen

// Wie lege ich einen Standard fest?

public string MyProperty { get; set; } 

Bitte schlagen nicht vor, dass ich ein Privateigentum verwenden & die get/set öffentliche Eigenschaften implementieren. Ich versuche, dies kurz zu halten und möchte nicht darüber streiten, warum das so viel besser ist. Vielen Dank.

+0

möglich Duplikat http://stackoverflow.com/questions/40730/how-do-you-give-ac-auto-property-a-default-value – devio

+0

OT: Ich glaube, Sie ein privates Feld bedeuten – Douglas

+0

Ich denke, Sie verwechseln die Konzepte von öffentlichen/privaten und automatischen Eigenschaften vs. manuell implementierten Eigenschaften mit Hintergrundfeldern. Diese Konzepte sind unabhängig. –

Antwort

5

Set der Standard in Ihrem Konstruktor:

this.MyProperty = <DefaultValue>; 
+1

ist die 'this' Aussage nicht redundant? – Jimmy

+3

ja, aber einige halten es für eine gute Kodierungspraxis. – sbenderli

+0

@Jimmy: Ich denke über die Verwendung von "dies" in dieser Situation, um es viel lesbarer zu machen. Ich will immer, dass es liest. = . Wenn es nur = ist, dann bricht es dieses Muster. – jcollum

3

Bitte schlagen nicht vor, dass ich

eine private Eigenschaft verwenden, die die Standardmethode solche Standardwerte einzustellen. Sie mögen es vielleicht nicht, aber das was die automatische Eigenschaftensyntax nach dem Kompilieren tut - es erzeugt ein privates Feld und benutzt dieses im Getter und Setter.

Sie können die Eigenschaft in einem Konstruktor festlegen, der einem Standard so nahe kommt wie möglich.

+0

Kein Argument dort - ich versuche nur, unkritischen Code kurz zu halten. – Alan

+2

@Alan Wenn Sie mehr als einen Konstruktor haben, ist dieser nicht mehr prägnant, da Sie sicherstellen müssen, dass die Initialisierung in allen Codepfaden stattfindet.Unter Verwendung eines privaten Unterstützungsfelds können Sie einen einzigen knappen ** Ort haben, um diese Eigenschaft zu initialisieren. – AaronLS

+2

@AaronLS Sie könnten wahrscheinlich in Ordnung sein, wenn Sie nur Ihre Konstruktoren verketten. – Alan

9

einfach initialisieren es im Konstruktor:

public class MyClass 
{ 
    public string MyProperty { get; set; } 

    public MyClass() 
    { 
     MyProperty = "default value"; 
    } 
} 

Beachten Sie, dass, wenn Sie mehrere Konstrukteure haben, werden Sie müssen dafür sorgen, dass jeder von ihnen entweder die Eigenschaft oder die Delegierten auf einen anderen Konstruktor setzt die tut.

+0

eine andere Eigenschaft oder ein anderer Ctor? –

+0

Danke Jon, aber sbenderli ist zuerst dran :). Aus irgendeinem Grund nahm ich fälschlicherweise an, dass der "Standardwert" überschreiben würde, was in der Inialisierung gesendet wurde. – Alan

+0

@jk: Ein anderer Konstruktor. Do. Bearbeitung. –

2

Nein, es wäre schön, wenn Sie einfach die Eigenschaft markieren, um den Standardwert anzugeben, aber Sie können nicht. Wenn Sie wirklich automatische Eigenschaften verwenden möchten, können Sie in der Eigenschaftsdeklaration keinen Standardwert festlegen.

Die sauberste Problemumgehung, die ich gefunden habe, besteht darin, die Standardwerte im Konstruktor festzulegen. Es ist immer noch ein bisschen hässlich. Die Standardwerte sind nicht mit der Eigenschaftsdeklaration verknüpft, und es kann ein Problem sein, wenn Sie mehrere Konstruktoren haben, aber das ist immer noch das Beste, was ich gefunden habe

2

Wenn Sie die automatische Implementierung von Eigenschaften verwenden werden, die einzige echte Die Option besteht darin, die Eigenschaftswerte in den Konstruktoren zu initialisieren.

1

Ab C# 6.0 können Sie einer Auto-Eigenschaft einen Standardwert zuweisen.

public string MyProperty {get; set; } = "Default Value";