2009-11-19 22 views
7

entiendo indexador nos permitirá acceder a una colección dentro de una clase como si la clase sí eran una serie.C# - paso a paso en su aplicación significativa

Supongamos que estamos desarrollando un proyecto, ¿dónde encajamos el uso práctico real (por ejemplo, puede ayudar) de dichos indexadores?

Respuesta

8

Consulte casi todas las clases de colecciones en el marco para ver un ejemplo. Si tuviera que recuperar un elemento de una tabla hash en un lenguaje sin un controlador paso a paso, me gustaría utilizar una sintaxis como:

object o = table.getvalue(key); 

donde un indexador permite la sintaxis algo más simple:

object o = table[key]; 

(escribiendo deliberadamente ignorando/problemas genéricos en los ejemplos anteriores)

5

Tiene varios ejemplos en las colecciones genéricas del propio marco. Diccionario es un buen ejemplo:

Dictionary<string, User> Users; 

Users["Jorge"].ResetPassword(); 

Eso sería mucho más elegante y simple de

Users.GetElementByKey("Jorge").ResetPassword(); 
1

Pues bien, la aplicación obvia para el uso de los indexadores son ... (sorpresa) Colecciones.

Tales como:

  • Listas:

    list[4] 
    
  • tablas hash:

    table["foo"] 
    table[Color.Black] 
    

Recuerde que los indexadores no están restringidos a un entero argumentos.

2

Supongamos que está desarrollando Microsoft .NET Framework para que lo usen otros desarrolladores (que en realidad es un "proyecto del mundo real"). Necesita escribir una clase que actúe como una matriz pero que permita cambiar el tamaño dinámicamente (la clase List<T>). Sin un controlador paso a paso, se podría escribir dos métodos para obtener y establecer elementos:

public T get(int index) { ... } 
public void set(int index, T value) { ... } 
// (Java advocates: no offense intended) 

asumir un usuario de la biblioteca quiere incrementar el segundo elemento. Ella tendrá que escribir:

list.set(1, list.get(1) + 1); 

Con un indexador, la sintaxis es mucho más simple, más fácil de leer y más fácil de entender:

list[1]++; 

(argumentos similares se aplican a cosas como Dictionary<TKey,TValue> ...)

0

Si la colección está ordenada, los primeros y los últimos elementos pueden ser útiles para obtener un elemento mínimo o máximo.

En ASP.Net, hay varios objetos que usan indexadores como Aplicación, Sesión y Solicitud.

3

indexador nos permite acceder a una colección dentro de una clase como si la clase en sí eran una matriz.

Si bien esto es cierto, se puede escribir una clase que no hace tienen una colección permanente de elementos dentro de sí mismo, pero aún así ser capaz de proporcionar de forma dinámica con un valor calculado cuando indexado. Los datos pueden recopilarse en tiempo real de Internet o de cualquier otra fuente de datos. Imagino, por ejemplo, una clase SearchResults, que podría utilizar para obtener resultados de búsqueda de Google para una cadena como esta: Console.out.WriteLine(SearchResults["Stackoverflow"].count). Reúne los datos solo cuando lo solicito y devuelvo una colección de los elementos recuperados.

Cuestiones relacionadas