【C#】「インデクサ」

インデクサ(indexer)とは、クラスのインスタンスを配列のように扱えるものです。

インデクサの構文

配列の型[] 変数名 = new 配列の型[要素数]; //配列の指定
アクセス修飾子 配列の要素の型 this[要素数の型 要素数名]{ get{ return フィールドの変数名[要素数]; } set{ フィールドの変数名[要素数] = value; } }

まず配列を指定します。
getで取得する値を設定し、setで代入する値を設定します。
getとsetはどちらか一方でも大丈夫です。
valueはユーザーが入力した値で、インデクサに入れておくことができないので、フィールド変数を定義して入れています。
「要素数の型」は基本的には「int型」を指定します。

インデクサの例

using System;
namespace ConsoleApplication1
{
 class MainClass
 {
  static void Main()
  {
   Program obj = new Program(); //Programクラスのオブジェクトを作成
obj[0] = "a"; //Programクラスの配列[0]に代入 obj[1] = "b"; //Programクラスの配列[1]に代入 obj[2] = "c"; //Programクラスの配列[2]に代入 obj[3] = "d"; //Programクラスの配列[3]に代入 obj[4] = "e"; //Programクラスの配列[4]に代入
for (int i = 0; i<5; i++) Console.WriteLine(obj[i]);
Console.ReadLine(); //キーを押すまでコマンドプロントを終了させない } }
class Program { string[] a = new string[5]; //「配列a」を「要素数5」でオブジェクト化する
public string this[int b] //「配列の要素の型」は「string型」。「要素数の型」は「int型」 //「this」で「Programクラス」の「インスタンス」を参照している { get { return a[b]; //「配列a」は「string型」で、「要素数b」は「int型」 } set { a[b] = value; } } } }

まず、「class Program」で「string[] a = new string[5];」で配列をオブジェクト化します。
「public string this[int b]」で「string型の配列の要素」、「int型の配列の要素数」を指定し、「this」で「class Program」のインスタンスを参照します。
「get」と「set」に「Programクラスのインスタンスを参照した、配列aの、int型の要素数b」の「a[b]」を指定します。
次に、「class MainClass」で「class Program」のオブジェクト「obj」を作成します。
オブジェクトを作成すると「class Program」で作成した「obj」の配列にアクセスできるので、「obj[0]~obk[4]」に文字列を代入します。
最後に実行するとコマンドプロントに「a、b、c、d、e」と表示されます。
クラスのインスタンスを配列と同じように扱えています。
これをインデクサと呼びます。