Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
78<br />
Indizierer<br />
public int SquareFeet;<br />
Für einfache Variablen ist das auch durchaus in Ordnung. Wenn Sie allerdings<br />
Details über die innere Speicherstruktur Ihrer Klasse verbergen wollen, dann sollten<br />
Sie Zugriffsfunktionen verwenden. Die set-Funktion bekommt den neuen<br />
Wert als Parameter value übergeben (wobei dieser Name fix vorgegeben ist –<br />
siehe Zeile 10 des Listings).<br />
Der Hauptzweck von Zugriffsfunktionen liegt natürlich nicht im Verbergen innerer<br />
Speicherstrukturen, sondern zum einen in der Möglichkeit, Lese- oder<br />
Schreibzugriffe explizit zu sperren:<br />
• get implementiert, set nicht: Die Eigenschaft kann außerhalb der Klassendefinition<br />
nur gelesen, nicht aber verändert werden.<br />
• set implementiert, get nicht: Die Eigenschaft kann außerhalb der Klassendefinition<br />
nur geschrieben, nicht aber wieder gelesen werden.<br />
• get und set implementiert: Der Wert der Eigenschaft lässt sich außerhalb der<br />
Klassendefinition sowohl lesen als auch verändern.<br />
Der andere und mindestens genauso wichtige Vorteil: set kann selbstverständlich<br />
Prüfungen enthalten und beispielsweise dafür sorgen, dass das Haus nicht versehentlich<br />
eine negative Quadratmeterzahl erhält; hinter get kann sich ebenso gut<br />
eine dynamische Eigenschaft verstecken – mithin ein Wert, der erst auf Anforderung<br />
berechnet und dann eventuell auch noch verifiziert wird. Eine Klasse House<br />
könnte bei Leseanforderungen beispielsweise die Quadratmeterzahlen sämtlicher<br />
in einer eigenen Liste gehaltenen Räume zusammenrechnen – und eine Klasse<br />
Picture ein Bild erst dann laden, wenn das Programm die Daten tatsächlich benötigt.<br />
5.4 Indizierer<br />
Wollten Sie Ihre Klassen nicht schon immer einmal auf einfachste Weise mit indizierten<br />
Zugriffen ausstatten – wie bei den Elementen eines Arrays? Mit C# geht<br />
das praktisch ohne Drumherum. Die grundlegende Syntax sieht so aus:<br />
Attribute Modifizierer Deklarator { Deklarationen }<br />
Ein einfaches Beispiel für eine Implementation:<br />
public string this[int nIndex]<br />
{<br />
get { ... }<br />
set { ... }<br />
}