Tutoriel C#SE CONNECTER
Tutoriel C#
auteur:php.cn  temps de mise à jour:2022-04-11 14:06:23

Indexeur C#



Indexeur Permet d'indexer un objet comme un tableau. Lorsque vous définissez un indexeur pour une classe, la classe se comporte comme un tableau virtuel. Vous pouvez accéder aux instances de cette classe à l'aide de l'opérateur d'accès au tableau ([ ]).

Syntaxe

La syntaxe de l'indexeur unidimensionnel est la suivante :

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

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

Le but de l'indexeur (Indexeur)

Le but de l'indexeur Les déclarations de comportement sont quelque peu similaires aux propriétés. Tout comme les propriétés, vous pouvez définir des indexeurs à l'aide des accesseurs get et set. Cependant, les propriétés renvoient ou définissent une donnée membre spécifique, tandis que les indexeurs renvoient ou définissent une valeur spécifique d'une instance d'objet. En d’autres termes, il divise les données d’instance en parties plus petites et indexe chaque partie, obtenant ou définissant chaque partie.

Définir une propriété implique de fournir le nom de la propriété. L'indexeur est défini sans nom, mais avec le mot-clé this, qui pointe vers l'instance de l'objet. L'exemple suivant illustre ce concept :

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();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

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

Rechargement de l'indexeur

L'indexeur peut être surchargé. Un indexeur peut également être déclaré avec plusieurs paramètres, et chaque paramètre peut être d'un type différent. Il n’est pas nécessaire que l’indexeur soit un nombre entier. C# permet aux indexeurs d'être d'autres types, par exemple des types chaîne.

L'exemple suivant montre la surcharge de l'indexeur :

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();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

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

Site Web PHP chinois