Skip to content

Was ist der Unterschied zwischen Prop und einer vollständigen Eigenschaft?

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;
Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.