C# - Indexer
Ein Indexierer ermöglicht die Indizierung eines Objekts, z. B. eines Arrays. Wenn Sie einen Indexer für eine Klasse definieren, verhält sich diese Klasse ähnlich wie ein virtuelles Array . Sie können dann mit dem Array-Zugriffsoperator ([ ]) auf die Instanz dieser Klasse zugreifen.
Syntax
Ein eindimensionaler Indexer hat die folgende Syntax −
element-type this[int index] { // The get accessor. get { // return the value specified by index } // The set accessor. set { // set the value specified by index } }
Verwendung von Indexern
Die Verhaltensdeklaration eines Indexers ist in gewisser Weise einer Eigenschaft ähnlich. Ähnlich wie bei den Eigenschaften verwenden Sie get und einstellen Accessoren zum Definieren eines Indexers. Eigenschaften geben jedoch ein bestimmtes Datenelement zurück oder legen es fest, wohingegen Indexer einen bestimmten Wert aus der Objektinstanz zurückgeben oder festlegen. Mit anderen Worten, es zerlegt die Instanzdaten in kleinere Teile und indiziert jeden Teil, ruft jeden Teil ab oder legt ihn fest.
Das Definieren einer Eigenschaft beinhaltet das Bereitstellen eines Eigenschaftsnamens. Indexer werden nicht mit Namen definiert, sondern mit this Schlüsselwort, das sich auf die Objektinstanz bezieht. Das folgende Beispiel demonstriert das Konzept −
Live-Demousing System; namespace IndexerApplication { class IndexedNames { private string[] namelist = new string[size]; static public int size = 10; public IndexedNames() { for (int i = 0; i < size; i++) namelist[i] = "N. A."; } public string this[int index] { get { string tmp; if( index >= 0 && index <= size-1 ) { tmp = namelist[index]; } else { tmp = ""; } return ( tmp ); } set { if( index >= 0 && index <= size-1 ) { namelist[index] = value; } } } static void Main(string[] args) { IndexedNames names = new IndexedNames(); names[0] = "Zara"; names[1] = "Riz"; names[2] = "Nuha"; names[3] = "Asif"; names[4] = "Davinder"; names[5] = "Sunil"; names[6] = "Rubic"; for ( int i = 0; i < IndexedNames.size; i++ ) { Console.WriteLine(names[i]); } Console.ReadKey(); } } }
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis −
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A.
Überladene Indexer
Indexer können überladen werden. Indexer können auch mit mehreren Parametern deklariert werden und jeder Parameter kann einen anderen Typ haben. Es ist nicht notwendig, dass die Indizes ganze Zahlen sein müssen. C# lässt zu, dass Indizes anderen Typs sein können, zum Beispiel ein String.
Das folgende Beispiel demonstriert überladene Indexer −
Live-Demousing System; namespace IndexerApplication { class IndexedNames { private string[] namelist = new string[size]; static public int size = 10; public IndexedNames() { for (int i = 0; i < size; i++) { namelist[i] = "N. A."; } } public string this[int index] { get { string tmp; if( index >= 0 && index <= size-1 ) { tmp = namelist[index]; } else { tmp = ""; } return ( tmp ); } set { if( index >= 0 && index <= size-1 ) { namelist[index] = value; } } } public int this[string name] { get { int index = 0; while(index < size) { if (namelist[index] == name) { return index; } index++; } return index; } } static void Main(string[] args) { IndexedNames names = new IndexedNames(); names[0] = "Zara"; names[1] = "Riz"; names[2] = "Nuha"; names[3] = "Asif"; names[4] = "Davinder"; names[5] = "Sunil"; names[6] = "Rubic"; //using the first indexer with int parameter for (int i = 0; i < IndexedNames.size; i++) { Console.WriteLine(names[i]); } //using the second indexer with the string parameter Console.WriteLine(names["Nuha"]); Console.ReadKey(); } } }
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis −
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A. 2
C Sprache
- C# Hello World – Ihr erstes C#-Programm
- C#-Schlüsselwörter und Bezeichner
- C#-Variablen und (primitive) Datentypen
- C#-Operatoren
- C# Bitwise- und Bit-Shift-Operatoren
- C# Grundlegende Ein- und Ausgabe
- C#-Ausdrücke, -Anweisungen und -Blöcke (mit Beispielen)
- C#-Kommentare
- C#-switch-Anweisung
- C# ternärer (? :) Operator