1. ホーム 
  2. 備忘録 
  3. C Sharp

インデクサー

インデクサー

C# では、ユーザー定義型が配列型と同様に [] を用いた要素の読み書きが行えるようにインデクサーという仕組みが用意されている

インデクサーの書き方は以下の通りである

アクセスレベル 戻り値の型 this[添字の型 添字]
{
  get
  {
    // getアクセサ
    // 添字が使える以外はプロパティと同じ
  }
  set
  {
    // setアクセサ
    // こちらも添字が使える以外はプロパティと同じ
  }
}

使用するイメージを具体的にするため、以下に例を記しておく(参考文献1より拝借)

using System;

/// <summary>
/// 添字の下限と上限を指定できる配列。
/// </summary>
class BoundArray
{
    int[] array;
    int lower;   // 配列添字の下限

    public BoundArray(int lower, int upper)
    {
        this.lower = lower;
        array = new int[upper - lower + 1];
    }

    // ここがインデクサー
    public int this[int i]
    {
        set { this.array[i - lower] = value; }
        get { return this.array[i - lower]; }
    }
}

class Program
{
    static void Main()
    {
        BoundArray a = new BoundArray(1, 9);

        for (int i = 1; i <= 9; ++i)
            a[i] = i; // 自作クラスだけど配列のようにアクセスできるのはインデクサーが設定されているから

        for (int i = 1; i <= 9; ++i)
            Console.Write("a[{0}] = {1}\n", i, a[i]);
    }
}

添字は一つである必要はなく、複数の添字を利用することができる

例えば『配列の配列』や『多次元配列』なども取り扱うことができる

また、添字の型に関しても、必ず整数型である必要はないので文字型や文字列型でもよい


    参考文献

  1. [C# によるプログラミング入門]インデクサー