2010-03-25 15 views
12

Conozco bien C#, pero es algo extraño para mí. En algún programa anterior, he visto este código:La palabra clave 'this' como propiedad

public MyType this[string name] 
{ 
    ......some code that finally return instance of MyType 
} 

¿Cómo se llama? ¿Para qué sirve esto?

Respuesta

25

Es indexer. Después de que lo haya declarado, puede hacer esto:

class MyClass 
{ 
    Dictionary<string, MyType> collection; 
    public MyType this[string name] 
    { 
     get { return collection[name]; } 
     set { collection[name] = value; } 
    } 
} 

// Getting data from indexer. 
MyClass myClass = ... 
MyType myType = myClass["myKey"]; 

// Setting data with indexer. 
MyType anotherMyType = ... 
myClass["myAnotherKey"] = anotherMyType; 
+0

Esta respuesta sería más completa si mostrara el acceso a la propiedad get (y/o set) en su bloque ".... some code". Esto sugiere que es más como un método. –

+0

Gracias, he actualizado la respuesta. –

+0

e hizo mucho menos común al tener colecciones genéricas integradas que cubren las necesidades de la mayoría de las personas. Ya no es necesario que escriba sus propias colecciones fuertemente tipadas para obtener un comportamiento estándar. –

6

Esto es Indexer Property. Le permite "acceder" a su clase directamente por índice, de la misma forma que accedería a una matriz, una lista o un diccionario.

En su caso, usted podría tener algo como:

public class MyTypes 
{ 
    public MyType this[string name] 
    { 
     get { 
      switch(name) { 
       case "Type1": 
         return new MyType("Type1"); 
       case "Type2": 
         return new MySubType(); 
      // ... 
      } 
     } 
    } 
} 

A continuación, sería capaz de utilizar esto como:

MyTypes myTypes = new MyTypes(); 
MyType type = myTypes["Type1"]; 
2

Esta es una propiedad especial llamada indexador. Esto permite acceder a su clase como una matriz.

myInstance[0] = val; 

Verá este comportamiento más a menudo en colecciones personalizadas, como la matriz de sintaxis es una interfaz conocida para acceder a los elementos de una colección que puede ser identificado por un valor de la clave, por lo general su posición (como en matrices y listas) o por una clave lógica (como en los diccionarios y tablas hash).

Puede encontrar más información acerca de los indexadores en el artículo Indexers (C# Programming Guide) de MSDN.

Cuestiones relacionadas