web-dev-qa-db-ja.com

インデクサーと「Item」という名前のプロパティを持つクラス

次の方法で.NET4でクラスを作成することは可能ですか?

  1. インデクサ、
  2. 「アイテム」という名前のプロパティ?

たとえば、このC#クラスはコンパイルされません。

public class MyClass
{
    public object Item { get; set; }
    public object this[string index] { get { return null; } set { } }
}

コンパイラはエラーを出します CS0102

タイプ「MyClass」には、「Item」の定義がすでに含まれています

Itemを明示的に定義しているのは1回だけですが。

28
Michael

このサイト に基づいて、属性を使用してインデクサーの名前を変更することができます

public class MyClass
{
    public object Item { get; set; }
    [System.Runtime.CompilerServices.IndexerName("MyItem")]
    public object this[string index] { get { return null; } set { } }
}
40
Jack Bolding

C#は、インデクサーをサポートしない言語用にItemというプロパティを内部的に作成します。この名前は、次のように IndexerNameAttribute を使用して制御できます。

[IndexerName("MyIndexer")]
public object this[string index]
{
    get { return blah; }
}
27
Danny Tuppeny

私の記憶が正しければ、そのようなインデクサーは「Item()」メソッドを介してVB.Netからアクセスできます。それが「2回定義」の由来です。

4
Hans Kesting