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"]); }
Result: Fri:5
ABC:-1
3. インターフェイスのインデクサー
インデクサーはインターフェイスでも宣言できます。 まず、インターフェイス インデクサーとクラス インデクサーの間には 2 つの違いがあります。インターフェイス インデクサーは修飾子を使用しません。第 2 に、インターフェイス インデックスにはアクセサー 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 サイトに注目してください。