Was ist neu in C# 3.0 - Automatische Eigenschaften


Eigenschaften einer Klasse wirken für ein instanziertes Objekt nicht anders als Felder. In Wirklichkeit verbergen sich hinter Eigenschaften aber eine Funktionalität bei der mit öffentlichen Methoden auf private Felder zugegriffen wird. Das hat den großen Vorteil das so sehr leicht eine Überprüfung der Werte vorgenommen werden kann noch bevor diese in dem privatem Feld gespeichert werden. Auch lassen sich durch Eigenschaften sehr leicht "nur lese"-Felder realisieren.

Der Kern einer Eigenschaft sind Accessor-Methoden die in der Regel als Paar auftreten. Ein so genannter getter, um den Wert des privaten Feldes zu lesen und einem setter um den Wert zu setzen. Die komplette Eigenschaft für den string name sähe so aus:

private string _name; 

public string name 

    get { return _name; } 

    set { _name = value; } 

}

Es ist nicht unüblich, das private Felder mit einem Unterstrich beginnen. So sind sie auch leicht von öffentlichen Eigenschaften oder Methoden zu unterschieden. Sollte irgendwo im Code ausserhalb der eigenen Klasse eine Variable mit Unterstrich auftauchen stimmt etwas mit der Kapselung nicht denn so ein Zugriff sollte nicht möglich sein.
Dieses Beispiel ist die reine Implementierung einer Eigenschaft ohne irgendeine Werteprüfung und das sind eine Menge Anweisungen für so eine einfache Aufgabe. Abhilfe schaffen hier automatische Eigenschaften, welche der Codeblock auf eine einzige Zeile Code reduzieren.

public string name { get; set; }

So kann auch eine Klasse mit mehreren Feldern mit wenige Zeile Code realisiert werden.

public class Person 

    public string name { get; set; } 

    public string vorname { get; set; } 

    public int alter { get; set; } 

    public bool istWeiblich { get; set; } 

}

Automatische Eigenschaften sind streng genommen kein Feature der Sprache C# sondern eine Funktion des Compiliers. Im Hintergrund werden immer noch private Felder erzeugt die man mit einem Programm wie dem .NET-Reflector sogar einsehen kann. Es ist selbstverständlich jederzeit möglich, automatische Eigenschaften und vollständig programmierte Eigenschaften in einer Klasse zu kombinieren. Eigenschaften mit Accessor-Methoden wenn eine Überprüfung nötig ist oder automatische Eigenschaften falls das nicht notwendig ist. Der große Vorteil ist es das sich Eigenschaften auch nachträglich ändern lassen ohne dabei den Aufbau der Klassen zu verändern. Hat man ein öffentliches Feld und möchte im Nachhinein eine Werteprüfung ist meistens großer Programmieraufwand nötig.


Geschrieben am: 21.02.2010
Technologien: Window, C#, .Net