ホームページ  >  記事  >  バックエンド開発  >  【C#チュートリアル】C#インデクサー(インデクサー)

【C#チュートリアル】C#インデクサー(インデクサー)

黄舟
黄舟オリジナル
2016-12-24 13:21:431095ブラウズ

C# Indexer

Indexer を使用すると、オブジェクトに配列のようにインデックスを付けることができます。クラスのインデクサーを定義すると、クラスは仮想配列のように動作します。このクラスのインスタンスには、配列アクセス演算子 ([ ]) を使用してアクセスできます。

構文

1 次元インデクサーの構文は次のとおりです:

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

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

インデクサーの目的

インデクサーの動作の宣言は、ある程度プロパティに似ています。プロパティと同様に、get および set アクセサーを使用してインデクサーを定義できます。ただし、プロパティは特定のデータ メンバーを返すか設定するのに対し、インデクサーはオブジェクト インスタンスの特定の値を返すか設定します。つまり、インスタンス データを小さな部分に分割し、各部分にインデックスを付けて、各部分を取得または設定します。

プロパティの定義には、プロパティ名の指定が含まれます。インデクサーは名前なしで定義されますが、オブジェクト インスタンスを指す this キーワードが使用されます。次の例は、この概念を示しています。

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

上記のコードをコンパイルして実行すると、次の結果が生成されます:

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

インデクサー (Indexer) のオーバーロード

インデクサー (Indexer) はオーバーロードできます。インデクサーは複数のパラメーターを使用して宣言することもでき、各パラメーターは異なる型にすることもできます。インデクサーが整数である必要はありません。 C# では、インデクサーを他の型 (たとえば、文字列型) にすることができます。

次の例は、オーバーロードされたインデクサーを示しています:

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

上記のコードがコンパイルされて実行されると、次の結果が生成されます:

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

上記は [c# チュートリアル] C# インデクサーの内容です。詳細については、関連コンテンツを参照してください。 、PHP 中国語 Web サイト (www.php.cn) に注意してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。