Mit einem Indexer können zu einer Klasse indizierte Zugriffe programmiert werden, ähnlich wie sie bei den Arrays definiert sind. Im Beispiel wird ein internes Arrays von Strings definiert. Der Indexer erlaubt den direkten Zugang auf dieses Array, indem er den übergebenen Index auf den Zugriff des internen Arrays umsetzt.
// Interne Objekte
private string[] _astrCartoons = new string[] {
"Tim und Struppi", // Platz 1
"Asterix und Obelix", // Platz 2
"Micky und Goofy", // Platz 3
"Road Runner", // Platz 4
"Fix und Foxi", // Platz 5
"Donald Duck" }; // Platz 6
// Indexer
public string this[uint uiIndex] {
// getter
get {
// Bereichsprüfung des Index
if (uiIndex < 1 || uiIndex > _astrCartoons.Length) {
throw new ArgumentOutOfRangeException();
} else {
// Auslesen des entsprechenden Wertes
return _astrCartoons[uiIndex-1];
}
}
// setter
set {
// Bereichsprüfung des Index
if (uiIndex < 1 || uiIndex > _astrCartoons.Length) {
throw new ArgumentOutOfRangeException();
} else {
// Auslesen des entsprechenden Wertes
_astrCartoons[uiIndex-1] = value;
}
}
}
Ein Objekt der Klasse CIndexer wird instanziert und die Werte des Arrays _astrCartoons[] werden mittels Indexer ausgelesen. Mit der getter Methode wird der entsprechende Wert ausgelesen, falls der Index grösser als 6 ist wird eine ArgumentOutOfRangeException ausgelöst.
CIndexer objIndexer = new CIndexer();
Console.WriteLine("Auf dem 1.Platz ist: " + objIndexer[1]);
Console.WriteLine("Auf dem 2.Platz ist: " + objIndexer[2]);
Console.WriteLine("Auf dem 3.Platz ist: " + objIndexer[3]);