29

次を使用して.NET 4でクラスを作成することは可能ですか?

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

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

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

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

タイプ 'MyClass' には既に 'Item' の定義が含まれています

ただし、明示的に定義Itemしているのは一度だけです。

4

3 に答える 3

42

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

public class MyClass
{
    public object Item { get; set; }
    [System.Runtime.CompilerServices.IndexerName("MyItem")]
    public object this[string index] { get { return null; } set { } }
}
于 2011-02-24T21:10:30.173 に答える
27

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

[IndexerName("MyIndexer")]
public object this[string index]
{
    get { return blah; }
}
于 2011-02-24T21:11:54.130 に答える
4

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

于 2011-02-24T21:03:12.640 に答える