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; }
}
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.
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; }
}
{
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.