Classe com indexador e propriedade denominada “Item”

É possível criar uma class no .NET 4 com:

  1. um indexador
  2. uma propriedade chamada “Item”?

Por exemplo, esta class C # não irá compilar para mim:

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

O compilador dá um erro CS0102 :

O tipo ‘MyClass’ já contém uma definição para ‘Item’

embora eu esteja apenas definindo explicitamente o Item uma vez.

Com base neste site , é possível usar um atributo para renomear o Indexador

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

C # internamente cria uma propriedade chamada Item para idiomas que não suportam o indexador. Você pode controlar esse nome usando o IndexerNameAttribute , assim:

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

Se bem me lembro, tal indexador pode ser acessado a partir do VB.Net através de um método “Item ()”. Isso seria onde aquele “definido duas vezes” vem.