インデクサーを使用すると、クラスまたは構造体のインスタンスに配列と同じようにインデックスを付けることができます。クラスのインデクサーを定義すると、クラスは配列アクセサー '[]' を使用してインスタンスにアクセスできます。インデクサーは属性に似ていますが、インデクサーはパラメーターを受け取ります (インデクサーは、アクセサー (特別なメソッド) を通じて実装されるクラスのプロパティであると考えることもできます)。例を挙げてみましょう。大学は人生で最も暇な時期です。学生は、かつてはやりたかったが、さまざまな理由でできなかったことがたくさんあります。クラスがあると、先生は生徒の名前または生徒番号を呼びます。私はクラス 4 です。先生は生徒番号を「クラス 4 の 1 番」と呼んでから、大きな声で「○○へ」と答えるのが好きです。 ."、"4年2組"、"到着"、"3年4組"... "3番。クラスメート。"、"HC666先生は今日腹痛で病院に行きました。" (仲の良い中国人のルームメイト)、「ああ、4番」…先生の点呼は4クラスの指標です。
class4をClassesクラスでインスタンス化されたオブジェクトとみなして、class[1]がクラスメイト1番のインデックス(配列を考えれば分かると思います)だとすると、どうやって実装するのでしょうか?
インデクサーを定義します:
前述したように、インデクサーは属性に似ています。当然、インデクサーもクラスのメンバーであるため、クラス内で定義する必要があります。以下のように:
public 返回值类型 this[参数类型 参数] { get { return 参数指定的值; } //get访问器 set { /*设置参数指定的值 */ } //set访问器 }
インデクサの例:
‐ ‐ ’ s ’ s ’ s ‐ ‐
学生の名前、名前インデックスから学生番号を取得するにはどうすればよいですか?インデックスを特別なメソッドとみなします。このメソッドはオーバーロードを使用して、異なるパラメーターで同じ機能を実現できるため、インデクサーは当然オーバーロードできます。使用法はメソッドのオーバーロードと似ています (メソッドのオーバーロードを表示するには、ここをクリックしてください)。上記の例を続けます。今回は、名前インデックスを使用して学生番号を取得する必要があります:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test1 {//定义一个能被索引的类 class Classes {//对类的索引实质是对类中数组的索引 public string[] StudentName=new string[6]; //定义索引器 public string this[int ID] { get { return StudentName[ID]; } set { StudentName[ID] = value; } //set访问器自带value参数 } } class Program { static void Main(string[] args) { Classes class4 = new Classes(); //索引写入 for (int i = 1; i < 6; i++) { class4[i] = "HC"+i; } //索引读出 for (int j = 1; j < 6; j++) { Console.WriteLine(j+"号\t"+class4[j]); } } } }