C#のインデックス付きプロパティ

投稿者: | 2018年1月3日

インデックス付きのプロパティをC#のクラスに導入する方法。
結論から言うと、インデックス付きプロパティはC#で使えません。配列などの個々の要素にインデックスでアクセスするより、配列全体を1つのプロパティにした方が、foreachなどで簡単に処理できるからとのことらしいです。

インデックス付きプロパティとは意味合いが異なりますが、C#にはインデクサというものがあります。オブジェクトを配列のようにインデックス付きで使用することで、特定のプロパティを参照できる仕組みです。文章で書くと分かりづらいですが、Delphiのデフォルトプロパティと同じです。

たとえば、MyDataクラスにItemsというリスト型のプロパティがあるとしたら、通常はMyData.Items[i]と記述してアクセスします。これがインデクサを使用するとMyData[i]でアクセスできるというわけです。インデクサは次のように定義します。

public class MyData
{
  private List<int> items;    // Itemsプロパティのフィールド

  public int this[int index]  // インデクサ
  {
    get
    {
      return items[index];
    }
    set
    {
      items[index] = value;
    }
  }
}

上記のように定義すると、MyData[i]でitemsリストにアクセスできるようになります。
ついでにこれをDelphiで書くと、次のようになります。

TMyData = class(TObject)
private
  FItems: TList;
public
  property Items[index: Integer]: Integer read GetItem write SetItem; default;
end;

 
おすすめの本
独習C# 新版
OBJECT PASCAL HANDBOOK―マルチデバイス開発ツールDelphiのためのプログラミング言語完全ガイド

カテゴリー: C#

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)