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 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 Implementieren einer einfachen Klasse mit automatisch implementierten Eigenschaften.

Siehe auch