Auto-Eigenschaft ist eine Kurzbezeichnung für automatisch implementierte Eigenschaft, wo der Entwickler muss nicht explizit das dahinter liegende Feld erklären, und der Compiler setzt man hinter den Kulissen auf.
1. Auto-Liegenschaften mit eigenem Setter
public class Context1
{
public Context1()
{
this.Items = new List<string>();
}
public List<string> Items { get; private set; }
}
Auto-Eigenschaften können unterschiedliche Erreichbarkeiten für Setter und Getter haben durch eine restriktivere Zugänglichkeit für die Accessor Angabe, für welche die Zugänglichkeit von der Zugänglichkeit der Eigenschaft unterscheidet.
Andere Beispiele sind:
public string Prop1 { get; private set; }
public string Prop2 { get; protected set; }
public string Prop3 { get; internal set; }
public string Prop4 { protected internal get; set; }
Diese Accessoren mit unterschiedlicher Zugänglichkeit können überall zugegriffen werden die, dass die Zugänglichkeit bestimmt, nicht nur aus dem Konstruktor.
2.Schreibgeschützte Eigenschaft mit Hintergrundfeld
öffentliche Klasse Context2 { private readonly Listenelemente;
public Context2()
{
this.items = new List<string>();
}
public List<string> Items
{
get { return this.items; }
}
} Vor C# 6, der einzige Weg, um den Wert einer Nur-Lese-Eigenschaft zu setzen war ausdrücklich das dahinter liegendes Feld zu erklären und es direkt eingestellt.
Da das Feld den readonly
Accessor hat, kann es nur während der Konstruktion des Objekts festgelegt werden.
3. Read-Only Auto-Liegenschaften
public class Context3
{
public List<string> Items { get; } = new List<string>();
}
Beginnend mit C# 6, §2 kann vom Compiler behandelt werden, indem ein Trägerfeld haben erzeugt wie für Lese-Schreib-Auto-Eigenschaften, aber In diesem Fall ist das Hintergrundfeld schreibgeschützt und kann nur während der Konstruktion des Objekts festgelegt werden.
4. Nur-Lese-Auto-Property mit Ausdruck bodied Getter
public class Context4
{
public List<string> Items => new List<string>();
}
Wenn Eigenschaften haben einen Wert, der jedes Mal, es ist erhalten, C# 6 erlaubt zu erklären, um den Körper des Getter ändert sich mit eine Lambda-ähnliche Syntax.
Der obige Code ist dies äquivalent:
public class Context4
{
public List<string> Items
{
get { return new List<string>(); }
}
}
So Nummer 4 ist wie eine Konstante, aber mit einer Referenztyp !? –
Wenn Sie mit "Konstante" meinen, dass "ständig eine neue Instanz dieses Werts zurückgegeben wird" (à la https://xkcd.com/221), dann ... äh, denke ich. Aber das ist nicht was "konstant" bedeutet. Es gibt einen Grund, warum Referenztypen * keine Konstanten sein können. – BoltClock
Sind Nummer 1 und 2 ähnlich? –