Ich bin ziemlich neu zu automatisch implementierten Eigenschaften und für die meisten davon finde ich sie ziemlich direkt, aber auf der Microsoft-Website heißt es:
In C # 3.0 und höher machen automatisch implementierte Eigenschaften die Deklaration von Eigenschaften prägnanter, wenn in den Eigenschaftenaccessoren keine zusätzliche Logik erforderlich ist. Sie ermöglichen dem Clientcode auch das Erstellen von Objekten. Wenn Sie eine Eigenschaft wie im folgenden Beispiel deklarieren, erstellt der Compiler ein privates anonymes Hintergrundfeld, auf das nur über die get- und set-Zugriffsmodule der Eigenschaft zugegriffen werden kann.
Kann jemand erklären, was die folgende Aussage in Bezug auf automatisch implementierte Eigenschaften bedeutet: " Sie ermöglichen Client-Code auch Objekte zu erstellen. "?
Ich kann nicht herausfinden, was das bedeutet.
Danke.
Ich glaube, das bezieht sich auf Objektinitialisierer Syntax, obwohl dies der Fall ist unklar. Automatisch implementierte Eigenschaften und Objektinitialisierer sind separate Dinge und sollten auf diese Weise nicht miteinander verknüpft werden.
Also, mit einer Klasse, die so aussieht:
%Vor%Sie können Objekte wie folgt erstellen:
%Vor%Hinweis:
Wie die Kommentare sagen (und die MSDN-Seite für Objektinitialisierer deklariert), können Sie die Objektinitialisierersyntax mit any zugreifbaren Feldern oder Eigenschaften verwenden. Die Tatsache, dass die MSDN-Seite für automatisch implementierte Eigenschaften sogar die Objekterstellung erwähnt, scheint wiederum eine schlechte Entscheidung für die Dokumentation zu sein.
Das ist leider eine schlechte Beschreibung auf der MSDN-Seite.
Objektinitialisierersyntax ( new Foo { X = 10, Y = 20 }
) ist vollständig trennbar von von automatisch implementierten Eigenschaften.
Objektinitialisierer können mit beliebigen einstellbaren Eigenschaften oder Feldern verwendet werden (und es gibt sogar eine Syntax zum Ändern von "unterproperties", wenn die "Haupteigenschaft" schreibgeschützt ist); Sie müssen dafür keine automatisch implementierte Eigenschaft verwenden.
Obwohl es gut ist, dass all diese Funktionen zusammen funktionieren, glaube ich, dass es sinnvoll ist, zumindest separat über sie zu lernen. Zum Beispiel könnten automatisch implementierte Eigenschaften in C # 2 ohne Objektinitialisierer eingeführt worden sein - oder umgekehrt.
Ich denke, was sie mit
meinen"Sie ermöglichen dem Clientcode auch das Erstellen von Objekten."
bedeutet, dass der Client-Code ein neues ref-Typ-Objekt initialisieren oder der auto-Eigenschaft ein Werttyp-Objekt zuweisen kann, ohne ein privates Feld zum Speichern der Daten erstellen zu müssen.
Oded hat das Beispiel für den Werttyp, also erweitern wir seine Cat-Klasse
%Vor%