In der Objektorientierten Programmierung erlaubt ein Indexer Instanzen einer Klasse oder einer Struktur, auf die gleiche Weise wie Arrays indiziert zu werden. Es handelt sich dabei um eine Art des Operator overloading.
Implementierung Indexer werden in C# mit Hilfe von get- und set-Akzessoren implementiert. Sie haben Ähnlichkeit mit Properties, jedoch besteht der Unterschied darin, dass sie nicht statisch sind, und dass Akzessoren Parameter benötigen. Sie werden wie Methoden aufgerufen, wobei beide Akzessoren den Index als Parameter verwenden, während der set-Akzessor zusätzlich den impliziten value-Parameter für die Zuweisung eines Wertes besitzt.
Beispiel Ein Beispiel in C# verdeutlicht die Verwendung eines Indexers in einer Klasse: class OurFamily { public OurFamily(params string[] pMembers) { familyMembers = new List<string>(); familyMembers.AddRange(pMembers);
private List<string> familyMembers;
public string this[int index] { // Der get accessor get
return familyMembers[index];
// Der set accessor set
familyMembers[index] = value;
public int this[string val] { // Index über den Wert ermitteln (das erste gefundene Element) get
return familyMembers.FindIndex(m => m == val);
public int Length => familyMembers.Count;
} Beispiel für die Verwendung: void Main() { var doeFamily = new OurFamily("John", "Jane"); for (int i = 0; i < doeFamily.Length; i++)
var member = doeFamily[i]; var index = doeFamily[member]; // in diesem Fall wie i, aber es soll gezeigt werden, wie man den Index eines Wertes sucht. Console.WriteLine($"{member} is the member number {index} of the {nameof(doeFamily)}");
In diesem Beispiel wird der Indexer verwendet, um den Wert an der i-ten Stelle zu ermitteln, und dann um die Position eines Wertes zu bestimmen. Das Programmbeispiel gibt Folgendes aus: John is the member number 0 of the doeFamily Jane is the member number 1 of the doeFamily
Einzelnachweise
Kategorie:Objektorientierte Programmierung