Lösung:
Der einzige Unterschied (abgesehen von der Tatsache, dass Sie die Initialisierung mit "Default Name" in Ihrem Klassenkonstruktor durchführen müssten) ist, dass _Name
wird innerhalb der Klasse selbst sichtbar. Es besteht die Gefahr, dass die Klasse intern referenziert _Name
eher, als Name
, alles wird gut funktionieren, und zu einem späteren Zeitpunkt werden Sie etwas Logik hinzufügen Name
das wird nicht aufgerufen, weil du verwendest _Name
innerhalb der Klasse.
Beispiel:
private string _Name = "Default Name";
public string Name
{
get { return _Name.Left(42); } // Changed the getter
set { _Name = value; }
}
void MyOtherMethod()
{
string foo = _Name; // Referencing the private field accidentally instead of the public property.
// Do something with foo
}
Das grundlegende Verhalten und der Zweck beider Eigenschaftenmethoden sind fast gleich. Der größte Unterschied liegt aber in der Umsetzung. Der Unterschied zwischen
public string Name{get;set;}
UND
private string _Name;
public string Name
{
get { return _Name; }
set { _Name=value; }
}
ist, wenn Sie die kurze Eigenschaftssyntax verwenden (eingeführt in Framework 3.0 oder höher), dann wird die Eigenschaft sting nie initialisiert, dh wenn Sie die Eigenschaft "Name" an einer beliebigen Stelle direkt verwenden, ohne den Wert darauf festzulegen, wird ein NULL-Wert zurückgegeben. Wenn Sie jedoch die zweite Syntax verwenden, um den Eigenschaftswert zu initialisieren, wird ein EMPTY-String zurückgegeben, da beim Initialisieren eines Strings dieser mit einem EMPTY-Wert und nicht mit NULL initialisiert wird. Wenn Sie also den Eigenschaftswert zurückgeben, ohne mit der FULL-Eigenschaftenmethode zu initialisieren, wird immer die EMPTY-Zeichenfolge und nicht der NULL-Wert zurückgegeben.
Ich glaube nicht, dass es einen Unterschied im kompilierten Code gibt. Der Grund, warum Sie jedoch möglicherweise den vollständigen Weg gehen möchten, ist, wenn Sie einen Standardwert hinzufügen möchten (was im Konstruktor in Kurzform möglich ist) oder dem Getter oder Setter zusätzlichen Code hinzufügen möchten
EDIT: Eigentlich ist dein Code falsch, so sollte es sein
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }//change here
}
nicht...
value = _Name;