Gewusst wie: Deklarieren und Verwenden von Lese-/Schreibeigenschaften (C#-Programmierhandbuch)How to: Declare and Use Read Write Properties (C# Programming Guide)

Eigenschaften stellen die Vorteile von öffentlichen Datenmembern bereit, ohne die mit dem ungeschützten, nicht kontrollierten und nicht geprüften Zugriff auf die Daten eines Objekts verknüpften Risiken aufzuweisen.Properties provide the convenience of public data members without the risks that come with unprotected, uncontrolled, and unverified access to an object's data. Dies wird durch Accessoren erreicht: Dies sind besondere Methoden, die den zugrunde liegenden Datenmembern Werte zuweisen bzw. diese Werte abrufen.This is accomplished through accessors: special methods that assign and retrieve values from the underlying data member. Der set-Accessor ermöglicht das Zuweisen von Datenmembern, und der get-Accessor ruft Datenmemberwerte ab.The set accessor enables data members to be assigned, and the get accessor retrieves data member values.

In diesem Beispiel wird eine Person-Klasse mit zwei Eigenschaften dargestellt: Name (Zeichenfolge) und Age (ganze Zahl).This sample shows a Person class that has two properties: Name (string) and Age (int). Beide Eigenschaften stellen einen get- und einen set-Accessor bereit, es handelt sich also um Lese- bzw. Schreibeigenschaften.Both properties provide get and set accessors, so they are considered read/write properties.

BeispielExample

class Person
{
    private string name = "N/A";
    private int age = 0;

    // Declare a Name property of type string:
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }

    // Declare an Age property of type int:
    public int Age
    {
        get
        {
            return age;
        }

        set
        {
            age = value;
        }
    }

    public override string ToString()
    {
        return "Name = " + Name + ", Age = " + Age;
    }
}

class TestPerson
{
    static void Main()
    {
        // Create a new Person object:
        Person person = new Person();

        // Print out the name and the age associated with the person:
        Console.WriteLine("Person details - {0}", person);

        // Set some values on the person object:
        person.Name = "Joe";
        person.Age = 99;
        Console.WriteLine("Person details - {0}", person);

        // Increment the Age property:
        person.Age += 1;
        Console.WriteLine("Person details - {0}", person);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Person details - Name = N/A, Age = 0
    Person details - Name = Joe, Age = 99
    Person details - Name = Joe, Age = 100
*/

Stabile ProgrammierungRobust Programming

Im vorherigen Beispiel sind die Name- und Age-Eigenschaften public (öffentlich) und besitzen jeweils einen get- und einen set-Accessor.In the previous example, the Name and Age properties are public and include both a get and a set accessor. Auf diese Weise können diese Eigenschaften von allen Objekten gelesen und überschrieben werden.This allows any object to read and write these properties. Manchmal ist es jedoch wünschenswert, einen der Accessoren auszuschließen.It is sometimes desirable, however, to exclude one of the accessors. Indem Sie den set-Accessor auslassen, wandeln Sie die Eigenschaft beispielsweise in eine schreibgeschützte Eigenschaft um:Omitting the set accessor, for example, makes the property read-only:

public string Name
{
    get
    {
        return name;
    }
}

Alternativ können Sie einen Accessor öffentlich verfügbar machen, während der andere als privat oder geschützt festgelegt wird.Alternatively, you can expose one accessor publicly but make the other private or protected. Weitere Informationen finden Sie unter Asymmetric Accessor Accessibility (Asymmetrischer Accessorzugriff).For more information, see Asymmetric Accessor Accessibility.

Nachdem die Eigenschaften deklariert wurden, können Sie genauso wie Felder der Klasse verwendet werden.Once the properties are declared, they can be used as if they were fields of the class. Daher kann sowohl beim Abrufen als auch beim Festlegen von Eigenschaftswerten eine relativ natürliche Syntax verwendet werden. Siehe dazu folgende Anweisungen:This allows for a very natural syntax when both getting and setting the value of a property, as in the following statements:

person.Name = "Joe";
person.Age = 99;

Beachten Sie, dass in der set-Methode einer Eigenschaft eine spezielle value-Variable verfügbar ist.Note that in a property set method a special value variable is available. Diese Variable enthält den vom Benutzer angegebenen Wert. Beispiel:This variable contains the value that the user specified, for example:

name = value;

Beachten Sie die einfache Syntax zum Erhöhen des Age-Eigenschaftswerts eines Person-Objekts:Notice the clean syntax for incrementing the Age property on a Person object:

person.Age += 1;

Wenn getrennte set- und get-Methoden verwendet wurden, um Eigenschaften zu modellieren, könnte der entsprechende Code folgendermaßen aussehen:If separate set and get methods were used to model properties, the equivalent code might look like this:

person.SetAge(person.GetAge() + 1);   

Die ToString-Methode wird in diesem Beispiel überschrieben:The ToString method is overridden in this example:

public override string ToString()
{
    return "Name = " + Name + ", Age = " + Age;
}

Beachten Sie, dass ToString im Programm nicht explizit verwendet wird.Notice that ToString is not explicitly used in the program. Es wird standardmäßig durch die WriteLine-Aufrufe aufgerufen.It is invoked by default by the WriteLine calls.

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
EigenschaftenProperties
Klassen und StrukturenClasses and Structs