Indexer
In der Objektorientierten Programmierung erlaubt ein Indexer Instanzen einer Klasse oder einer Struktur, auf die gleiche Weise wie Arrays[1] indiziert zu werden. Es handelt sich dabei um eine Art des Operator overloading.
Implementierung
BearbeitenIndexer werden in C# mit Hilfe von get und set Accessoren implementiert. Sie haben Ähnlichkeit mit Properties, jedoch besteht der Unterschied darin, dass sie nicht statisch sind, und dass Accessoren Parameter benötigen. Sie werden wie Methoden aufgerufen, wobei beide Accessoren den Index als Parameter verwenden, während der set-Accessor zusätzlich den impliziten value-Parameter für die Zuweisung eines Wertes besitzt.
Beispiel
BearbeitenEin Beispiel in C# verdeutlicht die Verwendung eines Indexers in einer Klasse:[2]
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
Bearbeiten- ↑ jagadish980: C# - What is an indexer in C#. Bulletin: SURESHKUMAR.NET FORUMS, 29. Januar 2008, archiviert vom am 22. September 2009; abgerufen am 1. August 2011.
- ↑ C# Interview Questions. .net Funda, abgerufen am 1. August 2011.