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

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:[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

  1. jagadish980: C# - What is an indexer in C#. In: Sureshkumar.net Forums. 29. Januar 2008, archiviert vom Original am 22. September 2009; abgerufen am 1. August 2011 (englisch).
  2. C# Interview Questions. .net Funda, abgerufen am 1. August 2011 (englisch).

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.