Arbeiten mit .NET: Grundlagen der OOP/ Eigenschaften

Aus Wikibooks

Dieses Kapitel richtet sich an fortgeschrittene Programmierer. Für einen ersten Einblick in die Eigenschaften, schlagen Sie bitte das Kapitel Der Vorteil von Objekten auf.

Eigenschaften[Bearbeiten]

Eine Eigenschaft (property) ist eine Sicht auf eine öffentliche Variable einer Klasse. Die Variable selbst wird durch einen Zugriffsmodifizierer wie private oder protected (bei Variablen, die in abgeleiteten Klassen überschrieben werden sollen) für den Zugriff von außen gesperrt und über eine Eigenschaft zugänglich gemacht. Über die Eigenschaft kann dann bestimmt werden, ob ein lesender oder schreibender Zugriff auf die referenzierte Variable erfolgen darf. Natürlich sind auch beide Möglichkeiten miteinander kombinierbar.

Eine Eigenschaft wird durch Zuweisung eines Datentyps (der dem Datentyp der Variable entsprechen muss) zu einem Eigenschaftsnamen angelegt und hat eine ähnliche Struktur wie die Syntax einer Funktion. Die Eigenschaft ist dabei wie eine Variable ansprechbar und ihr kann auch ein Zugriffsmodifizierer zugewiesen werden. Eine Eigenschaft enthält selbst keine Daten, sondern bildet diese auf die referenzierte Variable ab.

Beispiel einer Eigenschaftsdefinition Wohnort für eine private Variable (_wohnort):

 public class EigenschaftBeispiel
 {
   private string _wohnort;
public string Wohnort { get { return (_wohnort); } set { _wohnort = "12345 " + value; } } }

Beispiel für den Zugriff auf die oben definierte Eigenschaft Wohnort:

 EigenschaftBeispiel instanz = new EigenschaftBeispiel();
 instanz.Wohnort = „Musterstadt“;
 System.Console.WriteLine(instanz.Wohnort);
 // Ausgabe: 12345 Musterstadt

Würde bei der obigen Definition der Eigenschaft 'Wohnort' der get-Block weggelassen, so würde der lesende Zugriff zu einem Zugriffsfehler führen (im Beispiel in der Zeile, in der die Ausgabe erfolgt).

Neben dem einfachen Setzen oder Lesen einer Eigenschaft, können im set-Block bzw. get-Block auch Operationen ausgeführt werden, beispielweise die Potenzierung eines bei set übergebenen Wertes (value mal Exponent), bevor er der Variablen zugewiesen wird. Das gleiche gilt für get. Theoretisch kann somit ein Zugriff für den Benutzer einer Klasse ganz unerwartete Ergebnisse bringen. Deshalb sollten alle Operationen, die Veränderungen auf einen Wert durchführen über normale Funktionen abgebildet werden. Ausgenommen sind natürlich Wertprüfungen bei set.

Ab der Version C# 3.0 (Visual Studio 2008) ist es nicht mehr nötig, das Eigenschaften als Zugriffsmodifier für Variablen verwendet werden. Das oben genannte Beispiel kann daher wie folgt geschrieben werden:


 public class EigenschaftBeispiel
 {
   public string Wohnort
   {
     get;
     set;
   }
 }

Das Verwenden von Eigenschaften macht besonders dann Sinn, wenn man den Zugriff auf eine Variable besonders sichern/lenken möchten. get und set können wie normale Methoden verwendet werden und per Zugriffsmodifier eingeschränkt werden (public / internal / protected / privat). Jedoch muss der Zugriffsmodifier restriktiver sein als der Eigenschafts-Modifier.

public class EigenschaftBeispiel
 {
   internal string Wohnort //internal ist der Zugriffsmodifier der Eigenschaft Wohnort
   {
     public get; //Fehler: da public nicht restriktiver ist als internal
     private set; //private erlaubt das schreiben nur von Funktionen/Methoden innerhalb der Klasse EigenschaftBeispiel
   }
 }