次の方法で.NET4でクラスを作成することは可能ですか?
たとえば、このC#クラスはコンパイルされません。
public class MyClass
{
public object Item { get; set; }
public object this[string index] { get { return null; } set { } }
}
コンパイラはエラーを出します CS0102 :
タイプ「MyClass」には、「Item」の定義がすでに含まれています
Item
を明示的に定義しているのは1回だけですが。
このサイト に基づいて、属性を使用してインデクサーの名前を変更することができます
public class MyClass
{
public object Item { get; set; }
[System.Runtime.CompilerServices.IndexerName("MyItem")]
public object this[string index] { get { return null; } set { } }
}
C#は、インデクサーをサポートしない言語用にItem
というプロパティを内部的に作成します。この名前は、次のように IndexerNameAttribute を使用して制御できます。
[IndexerName("MyIndexer")]
public object this[string index]
{
get { return blah; }
}
私の記憶が正しければ、そのようなインデクサーは「Item()」メソッドを介してVB.Netからアクセスできます。それが「2回定義」の由来です。