Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

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-Demo
using 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-Demo
using 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

  1. C# Hello World – Ihr erstes C#-Programm
  2. C#-Schlüsselwörter und Bezeichner
  3. C#-Variablen und (primitive) Datentypen
  4. C#-Operatoren
  5. C# Bitwise- und Bit-Shift-Operatoren
  6. C# Grundlegende Ein- und Ausgabe
  7. C#-Ausdrücke, -Anweisungen und -Blöcke (mit Beispielen)
  8. C#-Kommentare
  9. C#-switch-Anweisung
  10. C# ternärer (? :) Operator