La forma en que veo los indexadores es que (acierta o no!), Acceder a algo por índice debe ser más eficiente que acceder de otra forma, porque de alguna forma, forma o forma, la clase cuyo indexador soy utilizando tiendas de algún tipo de índice que le permite buscar valores rápidamente cuando se accede de esa manera.
El ejemplo clásico es una matriz, cuando accede al elemento n de una matriz mediante el uso del código myarray [3], el compilador/intérprete sabe cuán grandes (en cuanto a la memoria) los elementos de la matriz son y pueden tratarlo como un desplazamiento desde el inicio de la matriz. También podría llamar al "for(int i = 0; i < myarray.length; i++) { if (i = 3) then { .. do stuff } }"
(¡no es que lo desee!), Que sería menos eficiente. También muestra cómo una matriz es un mal ejemplo.
Supongamos que tenía una clase de colección que almacena, umm, DVD, por lo que:
public class DVDCollection
{
private Dictionary<string, DVD> store = null;
private Dictionary<ProductId, string> dvdsByProductId = null;
public DVDCollection()
{
// gets DVD data from somewhere and stores it *by* TITLE in "store"
// stores a lookup set of DVD ProductId's and names in "dvdsByProductid"
store = new Dictionary<string, DVD>();
dvdsByProductId = new Dictionary<ProductId, string>();
}
// Get the DVD concerned, using an index, by product Id
public DVD this[ProductId index]
{
var title = dvdsByProductId[index];
return store[title];
}
}
Sólo mi 2p, pero, como he dicho, .. Siempre he considerado un "paso a paso" como una manera conveniente de obtener datos de algo.
¿Aparte del List-type, el LinkedList-type, el Dictionary-type o las otras colecciones? ;) A menudo, cuando tiene una lista de algo, se considera útil proporcionar un indizador, por lo que uno puede hacer myList [k] en lugar de myList.Get (k) o la versión de VB myList.Item (k) – Skurmedel
@Skurmedel Please explicar, obviamente me falta algo –
Righto, actualicé mi comentario. – Skurmedel