Automatisch implementierte Eigenschaften
Automatisch implementierte Eigenschaften machen die Eigenschaftsdeklaration präziser, wenn in den Eigenschaftenaccessoren keine andere Logik erforderlich ist. Zudem ermöglichen sie Clientcode das Erstellen von Objekten. Wenn Sie eine Eigenschaft wie im folgenden Beispiel gezeigt deklarieren, erstellt der Compiler ein privates, anonymes, dahinter liegendes Feld, auf das nur über get
und set
-Accessoren zugegriffen werden kann. init
Accessoren können auch als automatisch implementierte Eigenschaften deklariert werden.
Beispiel
Das folgende Beispiel zeigt eine einfache Klasse mit automatisch implementierten Eigenschaften:
// This class is mutable. Its data can be modified from
// outside the class.
public class Customer
{
// Auto-implemented properties for trivial get and set
public double TotalPurchases { get; set; }
public string Name { get; set; }
public int CustomerId { get; set; }
// Constructor
public Customer(double purchases, string name, int id)
{
TotalPurchases = purchases;
Name = name;
CustomerId = id;
}
// Methods
public string GetContactInfo() { return "ContactInfo"; }
public string GetTransactionHistory() { return "History"; }
// .. Additional methods, events, etc.
}
class Program
{
static void Main()
{
// Initialize a new object.
Customer cust1 = new Customer(4987.63, "Northwind", 90108);
// Modify a property.
cust1.TotalPurchases += 499.99;
}
}
Sie können keine automatisch implementierten Eigenschaften in Schnittstellen deklarieren. Automatisch implementierte Eigenschaften deklarieren ein privates Instanzsicherungsfeld, und Schnittstellen können Keine Instanzfelder deklarieren. Beim Deklarieren einer Eigenschaft in einer Schnittstelle, ohne einen Text zu definieren, wird eine Eigenschaft mit Zugriffsmethoden deklariert, die von allen Typen implementiert werden muss, die die Schnittstelle implementieren.
Sie können automatisch implementierte Eigenschaften ähnlich wie Felder initialisieren:
public string FirstName { get; set; } = "Jane";
Die im vorherigen Beispiel gezeigte Klasse kann geändert werden. Der Clientcode kann die Werte in Objekten nach der Erstellung ändern. In komplexen Klassen mit signifikantem Verhalten (Methoden) sowie Daten, ist es oft notwendig, öffentliche Eigenschaften zu haben. Für kleine Klassen oder Strukturen, die nur einen Satz von Werten (Daten) kapseln und wenig oder kein Verhalten aufweisen, sollten Sie jedoch eine der folgenden Optionen verwenden, um die Objekte unveränderlich zu machen:
- Deklarieren Sie nur eine
get
-Zugriffsmethode (überall unveränderlich mit Ausnahme des Konstruktors). - Deklarieren Sie eine
get
-Zugriffsmethode und eineinit
-Zugriffsmethode (überall unveränderlich außer während der Objekterstellung). - Deklarieren Sie die
set
-Zugriffsmethode als privat (unveränderlich für Consumer).
Weitere Informationen finden Sie unter Implementieren einer einfachen Klasse mit automatisch implementierten Eigenschaften.