Eigenschaften in C# 👍 👎

C# besitzt eine – meiner Meinung nach – äußerst elegante Implementierung für Akzessoren. Während es beispielsweise in Java üblich ist, nach dem Muster getEigenschaft() (und setEigenschaft(…)) zu verfahren, kombiniert C# Felder und Zugriffsmethoden zu sog. Properties.

Dies stellt einerseits die Kapselung der internen Daten sicher, vermeidet darüber hinaus jedoch eine Sammlung dutzender Zugiffsmethoden neben den eigentlichen Operationen einer Klasse. Sollte man lediglich "Standardzugriff" benötigen, wird einem dies besonders einfach gemacht – doch dazu später noch etwas mehr.

Als kleines Beispiel dazu wollen wir eine Klasse Person entwickeln, welche den Vor- und Nachnamen einer Person aufnehmen kann:
Klasse "Person" mit Eigenschaften (manuelle Implementierung)
010203040506070809101112131415161718192021
public class Person {    private string firstName;    public string FirstName {        get {            return this.firstName;        }        set {            this.firstName = value;        }    }
private string lastName; public string LastName { get { return this.lastName; } set { this.lastName = value; } }}
Wie man sieht, erstellen wir dazu private Felder für die Daten und definieren dann die Eigenschaft (per Konvention mit einem Großbuchstaben beginnend) mit den entsprechenden Zugriffsmethoden (get und set). Der Parameter value wird implizit zur Verfügung gestellt und enthält den jeweils zugewiesenen Wert.

Der Zugriff auf diese Daten ist nun ganz einfach möglich:
Zugriff auf Eigenschaften der Klasse "Person"
0102030405060708091011
  // Zuweisung nach ObjekterzeugungPerson ich = new Person();
ich.FirstName = "Holger"; // Abfrage liefert "Holger"ich.LastName = "Stehle"; // Abfrage liefert "Stehle"
// Zuweisung per ObjektinitialisierungPerson ich = new Person() {
FirstName = "Holger", LastName = "Stehle"}; /* Abfrage-Resultate wie oben */
Innerhalb der Zugriffsmethoden kann beispielsweise Validierungslogik untergebracht werden. Das bloße Zuweisen und Abfragen ohne besondere zusätzliche Arbeit ist jedoch auch noch deutlich kompakter möglich – C# implementiert die Zugriffsmethoden dann automatisch. Sogar die interne Eigenschaft kann man sich sparen:
Klasse "Person" mit Eigenschaften (automatische Implementierung)
0102030405060708091011
public class Person {    public string FirstName {        get;        set;    }
public string LastName { get; set; }}
Das Verhalten ist nun wie in unserer vorherigen Klasse, die Verwendung entsprechend ebenfalls identisch. Eine feinere Abstimmung der Zugriffsebenen ist ebenfalls möglich. Weitere Details zur Verwendung finden sich im MSDN.


Projektverweise

Kategorien / Archiv  |  Übersicht RSS-Feed

Schlagworte

Suche