インデクサ 実装例と汎用定義と

基本文法

インデクサ

クラスや構造体のインスタンスに対し、配列のように添え字でアクセスできるようにするための文法。
他のプログラミング言語でも見かけない珍しいものですが、使いどころもあまりないかも。

文字例の例

C#言語の文字列もインデクサを実装しているので、各文字をインデクサでアクセスすることが出来ます。
string name = "山田太郎";
char c = name[0]; // c は '山'
※CやC++の配列に似てますがC#の配列は暗黙的にSystem.Arrayクラスを継承するのに対し、文字列はSystem.Objectクラスを継承する普通のクラスです。

実装方法

返却する型とthisと添え字の型を指定する。インデックスは数値である必要もない。
要素型 this[int index]
{
    get => 要素[index];

    set => 要素[index] = value;

}

サンプル実装例

// 旧暦カレンダー
class OldCalendar
{
    private string[] names = new string[] { "睦月","如月","弥生","卯月","皐月"};
 
    public string this[int index]
    {
        get => names[index-1]; 
        //set => names[index-1] = value; 
    }
}
 
// 使用する側
var calendar = new OldCalendar();

// クラスに対し添え字でアクセス "如月"が取得される
var feb = calendar[2];

ジェネリクスによる汎用的実装サンプル



class Collection<T>
{
    private T[] array;
 
    public Collection(int length)
    {
        array = new T[length];
    }
 
    public T this[int index]
    {
        get => array[index]; 
        set => array[index] = value; 
    }
}