logo search
Лекции по ая

Индексаторы

Индексаторы позволяют индексировать экземпляры класса или структуры так же, как массивы. Индексаторы напоминают свойства, но их методы доступа принимают параметры.

Очень часто класс содержит некий набор объектов (массив, список). Для доступа к элементам этого набора необходимо реализовать два параметра: индекс элемента и значение. Для повышения удобства работы с такими классами были разработаны индексаторы. В случае их реализации в классе с объектной переменной можно работать как с массивом, т.е. после её идентификатора указывать индекс элемента, к которомe мы обращаемся для чтения или для записи.

Индексаторы определяться следующим образом:

[<атрибуты>] [<модификаторы>] <тип> this [<индекс>]

{

[get

{

}]

[set

{

}]

}

Индекс представляет собой список формальных параметров, описывающий индекс элементов, по которым осуществляется доступ к массиву по механизму, реализованному в классе.

Синтаксически объявление индексатора такое же, как и в случае свойств, но методы get и set приобретают аргументы по числу размерности массива, задающего индексы элемента, значение которого читается или обновляется. У класса может быть только один индексатор и у этого индексатора стандартное имя this. Так что если среди полей класса есть несколько массивов, то индексация объектов может быть выполнена только по одному из них.

Рассмотрим пример:

class Chair

{

string[] lesson=new string[5];

public string this[int i]

{

get

{

return lesson[i];

}

set

{

lesson[i] = value;

}

}

}

class Program

{

static void Main()

{

Chair C1 = new Chair();

C1[0] = "АЯ";

C1[1] = "Инфрматика";

C1[2] = "БД";

for (int i = 0; i < 3; i++)

Console.WriteLine(C1[i]);

Console.ReadLine();

}

}

В приведенном примере, создан класс Chair – описывающий кафедру. Поле lesson определяет предметы проводимые на кафедре. При помощи индексатора выполняется изменение и чтение поля lesson.