Я смотрю на индексаторы так (правильно или неправильно!), Доступ к чему-либо по индексу должен быть более эффективным, чем доступ к нему любым другим способом, потому что в некотором роде, форме или форме, класс, индексатор которого я использую, хранит некоторую форму index, что позволяет ему быстро искать значения при доступе таким образом.
Классическим примером является массив, когда вы обращаетесь к элементу n массива с помощью кода myarray [3], компилятор / интерпретатор знает, насколько велики (с точки зрения памяти) элементы массива, и может рассматривать его как смещение от начало массива. Вы также можете "for(int i = 0; i < myarray.length; i++) { if (i = 3) then { .. do stuff } }"
(хотя вам и не хотелось бы!), Что было бы менее эффективно. Это также показывает, что массив является плохим примером.
Допустим, у вас есть класс коллекции, в котором хранятся, ммм, DVD, так что:
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];
}
}
Просто мой 2p, но, как я уже сказал, ... Я всегда считал "индексатор" наиболее целесообразным способом извлечения данных из чего-либо.
person
Rob
schedule
02.02.2010