Indexer

objektorientierte Programmierung

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

Bearbeiten

Indexer 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

Bearbeiten

Ein 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
  1. jagadish980: C# - What is an indexer in C#. Bulletin: SURESHKUMAR.NET FORUMS, 29. Januar 2008, archiviert vom Original am 22. September 2009; abgerufen am 1. August 2011.
  2. C# Interview Questions. .net Funda, abgerufen am 1. August 2011.