Automatisch implementierte Eigenschaften (C#-Programmierhandbuch)

In C# 3.0 und höher werden Eigenschaftsdeklarationen durch automatisch implementierte Eigenschaften präziser, wenn in den Eigenschaftenzugriffsmethoden keine zusätzliche 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. In C# 9 und höher können init-Zugriffsmethoden auch als automatisch implementierte Eigenschaften deklariert werden.

Beispiel

Das folgende Beispiel zeigt eine einfache Klasse, die über einige automatisch implementierte Eigenschaften verfügt:

// This class is mutable. Its data can be modified from
// outside the class.
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()
    {
        // Intialize 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 Unterstützungsfeld für die private Instanz. Schnittstellen deklarieren möglicherweise keine Instanzfelder. 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.

Ab C# 6 können Sie 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 eine init-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 Vorgehensweise: Implementieren einer einfachen Klasse mit automatisch implementierten Eigenschaften.

Siehe auch