Automatisch implementierte Eigenschaften (C#-Programmierhandbuch)Auto-Implemented Properties (C# Programming Guide)

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.In C# 3.0 and later, auto-implemented properties make property-declaration more concise when no additional logic is required in the property accessors. Zudem ermöglichen sie Clientcode das Erstellen von Objekten.They also enable client code to create objects. 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.When you declare a property as shown in the following example, the compiler creates a private, anonymous backing field that can only be accessed through the property's get and set accessors.

BeispielExample

Das folgende Beispiel zeigt eine einfache Klasse, die über einige automatisch implementierte Eigenschaften verfügt:The following example shows a simple class that has some auto-implemented properties:


// This class is mutable. Its data can be modified from
// outside the class.
class Customer
{
    // Auto-Impl 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;
    }
}

Ab C# 6 können Sie automatisch implementierte Eigenschaften ähnlich wie Felder initialisieren:In C# 6 and later, you can initialize auto-implemented properties similarly to fields:

public string FirstName { get; set; } = "Jane";  

Die im vorherigen Beispiel gezeigte Klasse kann geändert werden.The class that is shown in the previous example is mutable. Clientcode kann die Werte in Objekten ändern, nachdem sie erstellt wurden.Client code can change the values in objects after they are created. In komplexen Klassen mit signifikantem Verhalten (Methoden) sowie Daten, ist es oft notwendig, öffentliche Eigenschaften zu haben.In complex classes that contain significant behavior (methods) as well as data, it is often necessary to have public properties. Bei kleinen Klassen oder Strukturen, die nur einen Satz von Werten (Daten) kapseln und nur wenig oder kein Verhalten besitzen, sollten Sie deshalb Objekte unveränderlich machen, entweder durch Deklarieren der Set-Zugriffsmethode privat (unveränderlich für Consumer) machen oder nur durch Deklarieren einer Get-Zugriffsmethode (unveränderlich überall außer im Konstruktor).However, for small classes or structs that just encapsulate a set of values (data) and have little or no behaviors, you should either make the objects immutable by declaring the set accessor as private (immutable to consumers) or by declaring only a get accessor (immutable everywhere except the constructor). Weitere Informationen finden Sie unterVorgehensweise: Implementieren einer einfachen Klasse mit automatisch implementierten Eigenschaften.For more information, see How to: Implement a Lightweight Class with Auto-Implemented Properties.

Attribute sind für automatisch implementierte Eigenschaften, jedoch offensichtlich nicht für die dahinter liegenden Felder zulässig, da diese nicht aus dem Quellcode zugänglich sind.Attributes are permitted on auto-implemented properties but obviously not on the backing fields since those are not accessible from your source code. Wenn Sie ein Attribut auf das dahinter liegende Feld einer Eigenschaft verwenden müssen, erstellen Sie einfach eine reguläre Eigenschaft.If you must use an attribute on the backing field of a property, just create a regular property.

Siehe auchSee Also

EigenschaftenProperties
ModifiziererModifiers