ホームページ >バックエンド開発 >C#.Net チュートリアル >C# のインデクサーの簡単な理解と使用法

C# のインデクサーの簡単な理解と使用法

高洛峰
高洛峰オリジナル
2016-12-17 09:18:211201ブラウズ

Indexer は、配列のような方法でオブジェクトにアクセスできるようにする特別なクラス メンバーであり、プログラムをより直感的で簡単に作成できるようにします。

1. インデクサーの定義

C# のクラス メンバーは、配列やコレクションを含む任意の型にすることができます。クラスに配列メンバーとコレクション メンバーが含まれている場合、インデクサーは配列メンバーまたはコレクション メンバーへのアクセスを大幅に簡素化します。

インデクサーを定義する方法は、属性の定義に似ています。その一般的な形式は次のとおりです。

[修饰符] 数据类型 this[索引类型 index]  
{  
    get{//获得属性的代码}                                                   
    set{ //设置属性的代码}  
}

修飾子には、public、protected、private、internal、new、virtual、sealed、override、abstract、extern が含まれます。データ型は、アクセスされる配列またはコレクション要素の型を表します。

インデクサーのタイプは、インデクサーが配列またはコレクションの要素にアクセスするために使用するインデックスのタイプを示します。これは、整数または文字列であり、このオブジェクトを操作する配列またはコレクションのメンバーを表し、単純にインデックスとして理解できます。インデクサーの名前。インデクサーにユーザー定義の名前を付けることはできません。 例:

class Z  
{  
        //可容纳100个整数的整数集  
        private long[] arr = new long[100];  
        //声明索引器  
        public long this[int index]  
        {  
            get  
            { //检查索引范围  
                if (index < 0 || index >= 100)  
                {  
                    return 0;  
                }  
                else  
                {  
                    return arr[index];  
                }  
            }  
            set  
            {  
                if (!(index < 0 || index >= 100))  
                {  
                    arr[index] = value;  
                }  
            }  
   }

2. インデクサーの使用

インデクサーを介してクラスのインスタンスの配列メンバーにアクセスできます。一般的な形式は次のとおりです: オブジェクト名 [インデックス]

。インデックスのデータ型は、インデクサーのインデックス型と同じである必要があります。例:

Z  z=new  z();  
z[0]=100;  
z[1]=101;  
Console.WriteLine(z[0]);

//オブジェクト z が最初に作成され、次にオブジェクト内の配列要素がインデックスを通じて参照されることを示します。


C# では、インデクサーの型を整数に制限しません。たとえば、インデクサーで文字列を使用できます。このタイプのインデクサーは、コレクション内の文字列を検索し、対応する値を返すことによって実装されます。アクセサーはオーバーロードできるため、文字列バージョンと整数バージョンが共存できます。

class DayCollection  
{  
      string[] days={"Sun","Mon","Tues","Wed","Thurs","Fri","Sat"};  
      private int GetDay(string testDay)  
     {  
        int i=0;  
        foreach(string day in days)  
          {  
              if(day==testDay)  
                      return i;  
                       i++;  
           }  
         return -1;  
      }  
  
     public int this[string day]  
      {  
  
          get{return (GetDay(day))}  
      }  
}  
   
static void Main(string[] args)  
{  
     DayCollection week=new DayCollection();  
     Console.WriteLine("Fri:{0}",week["Fri"]);  
     Console.WriteLine("ABC:{0}",week["ABC"]);  
}
f 結果: FRI: 5

ABC: -1

3、インターフェースのインデクサー

はインターフェースでインデクサーを宣言することもできます。インターフェースのインデックスとインデクサーの間には 2 つの違いがあります:

第一に、インターフェイス インデクサーは修飾子を使用しません。

第二に、インターフェイス インデックスにはアクセサー get または set のみが含まれ、実装ステートメントは含まれません。

アクセサーの目的は、インデクサーが読み取り/書き込み、読み取り専用、書き込み専用のいずれであるかを示すことです。読み取り/書き込みの場合、アクセサーの get または set を同時に省略することはできません。読み取り専用の場合、set アクセサーは省略されます。書き込み専用の場合、get アクセサーは省略されます。

例:

public interface IAddress  
{  
string this[int index]{get;set;}  
string Address{get;set;}  
string Answer();  
}

は、宣言されたインターフェイス IAddress に、インデクサー、プロパティ、メソッドの 3 つのメンバーが含まれており、インデクサーは読み取りおよび書き込み可能であることを意味します。

4. インデクサーと属性の比較

インデクサーと属性は両方ともクラスのメンバーであり、構文は非常に似ています。インデクサーは通常、カスタム コレクション クラスで使用されます。インデクサーを使用してコレクション オブジェクトを操作するのは、配列プロパティを使用するのと同じくらい簡単です。これにより、クラスのフィールド メンバーの柔軟性が向上します。

C# のインデクサーの簡単な理解と使用法



C# のインデクサーの簡単な理解と使用法に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

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