Indexer は、配列のような方法でオブジェクトにアクセスできるようにする特別なクラス メンバーであり、プログラムをより直感的で簡単に作成できるようにします。
1. インデクサーの定義
C# のクラス メンバーは、配列やコレクションを含む任意の型にすることができます。クラスに配列メンバーとコレクション メンバーが含まれている場合、インデクサーは配列メンバーまたはコレクション メンバーへのアクセスを大幅に簡素化します。
インデクサーを定義する方法は、属性を定義する方法と似ています。その一般的な形式は次のとおりです:
[修飾子] データ型 this[インデックス型インデックス]
{ 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を作成することを意味しますまず、オブジェクト内の配列要素をインデックスで参照します。
3. インターフェイス内のインデクサー
インデクサーはインターフェイス内でも宣言できます。インターフェイス インデクサーとクラス インデクサーには 2 つの違いがあります。1 つ目は、インターフェイス インデクサーにはアクセサーの get または set のみが含まれ、実装が含まれていないことです。声明。アクセサーの目的は、インデクサーが読み取り/書き込みであるか、読み取り専用であるか、書き込み専用であるかを示すことです。読み取り専用の場合は get アクセサーも set アクセサーも省略できません。アクセサーは省略されます。書き込み専用の場合は、get アクセサーを省略します。
例:
public interface IAddress { string this[int index]{get;set;} string Address{get;set;} string Answer(); }
は、宣言されたインターフェイス IAddress に、インデクサー、プロパティ、メソッドの 3 つのメンバーが含まれており、そのうちのインデクサーが読み取りおよび書き込み可能であることを意味します。
4. インデクサーと属性の比較
インデクサーと属性は両方ともクラスのメンバーであり、構文は非常に似ています。インデクサーは通常、カスタム コレクション クラスで使用されます。インデクサーを使用してコレクション オブジェクトを操作するのは、配列プロパティを使用するのと同じくらい簡単です。これにより、クラスのフィールド メンバーの柔軟性が向上します。
その他の C# インデクサー関連の記事については、PHP 中国語 Web サイトに注目してください。