Heim  >  Artikel  >  Backend-Entwicklung  >  [C#-Tutorial] C#-Indexer (Indexer)

[C#-Tutorial] C#-Indexer (Indexer)

黄舟
黄舟Original
2016-12-24 13:21:431097Durchsuche

C# Indexer

Indexer ermöglicht die Indizierung eines Objekts wie ein Array. Wenn Sie einen Indexer für eine Klasse definieren, verhält sich die Klasse wie ein virtuelles Array. Sie können mit dem Array-Zugriffsoperator ([]) auf Instanzen dieser Klasse zugreifen.

Syntax

Die Syntax eines eindimensionalen Indexers lautet wie folgt:

element-type this[int index] 
{
   // get 访问器
   get 
   {
      // 返回 index 指定的值
   }

   // set 访问器
   set 
   {
      // 设置 index 指定的值 
   }
}

Der Zweck des Indexers (Indexer)

Das Verhalten des Indexers wird in gewisser Weise wie eine Eigenschaft deklariert. Genau wie Eigenschaften können Sie Indexer mithilfe der Get- und Set-Accessoren definieren. Eigenschaften geben jedoch ein bestimmtes Datenelement zurück oder legen es fest, während Indexer einen bestimmten Wert einer Objektinstanz zurückgeben oder festlegen. Mit anderen Worten: Es zerlegt die Instanzdaten in kleinere Teile und indiziert jeden Teil, wobei jeder Teil abgerufen oder festgelegt wird.

Zur Definition einer Eigenschaft gehört die Angabe des Eigenschaftsnamens. Der Indexer wird ohne Namen, aber mit dem Schlüsselwort this definiert, das auf die Objektinstanz verweist. Das folgende Beispiel veranschaulicht dieses Konzept:

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 die folgenden Ergebnisse:

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.

Neuladen des Indexers

Indexer kann überlastet werden. Ein Indexer kann auch mit mehreren Parametern deklariert werden und jeder Parameter kann einen anderen Typ haben. Es ist nicht erforderlich, dass der Indexer eine Ganzzahl ist. In C# können Indexer auch andere Typen haben, beispielsweise String-Typen.

Das folgende Beispiel zeigt die Überlastung des Indexers:

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";
         // 使用带有 int 参数的第一个索引器
         for (int i = 0; i < IndexedNames.size; i++)
         {
            Console.WriteLine(names[i]);
         }
         // 使用带有 string 参数的第二个索引器
         Console.WriteLine(names["Nuha"]);
         Console.ReadKey();
      }
   }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgenden Ergebnisse:

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.
2

Das Obige ist Der Inhalt von [C# Tutorial] C# Indexer Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn