インデックス付きのプロパティを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のためのプログラミング言語完全ガイド