2011-02-24 18 views
26

¿Es posible crear una clase de .NET 4 con:clase con el indexador y propiedad denominada "Punto"

  1. un indexador,
  2. una propiedad denominada "Punto"?

Por ejemplo, esta clase de C# no se compilará para mí:

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

El compilador da un error CS0102:

El tipo 'MiClase' ya contiene una definición de 'artículo '

aunque solo defino explícitamente Item una vez.

Respuesta

37

Basado en this site, es posible utilizar un atributo para cambiar el nombre del controlador paso a paso

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

Si no recuerdo mal, se puede acceder a dicho indexador desde VB.Net a través del método "Item()". De ahí procedería ese "definido dos veces".

23

C# internamente crea una propiedad llamada Item para idiomas que no son compatibles con el indexador. Puede controlar este nombre usando el IndexerNameAttribute, así:

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