佐々木屋

技術的なことから趣味まで色々書きます

インデクサ

ユーザー定義型(構造体やクラス)のオブジェクトに対して、配列のような特定要素を取得・設定できる仕組みをインデクサと言います。VB.NETでは既定のプロパティとも言います。

インデクサはメソッドとプロパティの両方の性質を持ち合わせた機能です。

  • getter/setterアクセサを設定する
  • getter/setterアクセサのアクセス修飾子の設定や省略はプロパティと一緒
  • インデクサ自体に名前をつけることはできない
  • 添字の型は何でも良い
  • 添字は2つ以上あっても良い
  • オーバーロードできる


public class Test {
    private string[] msg = { "最初", "まんなか", "最後" };
    
    public string this[int index] {
        get {
            return msg[index];
        }
        set {
            msg[index] = value;
        }
    }

    public string this[int index1,int index2] {
        get {
            return msg[index1] + msg[index2];
        }
    }
}

Test t = new Test();
Console.WriteLine(t[1]);
Console.WriteLine(t[1,2]);
Public Class Test
    Private msg As String() = {"最初", "まんなか", "最後"}

    Default Public Property Item(ByVal index As Integer) As String
        Get
            Return msg(index)
        End Get
        Set(ByVal value As String)
            msg(index) = value
        End Set
    End Property

    Default Public Property Item(ByVal index1 As Integer, ByVal index2 As Integer) As String
        Get
            Return msg(index1) & msg(index2)
        End Get
    End Property
End Class

Dim t As New Test
Console.WriteLine(t.Item(1))
Console.WriteLine(t.Item(1, 2))
最初
まんなか
最後



インデクサとよく似た機能で名前付きプロパティという機能があります。これはVB.NETの機能でC#には残念ながらありません。
sasaki816.hatenablog.com