Высокоуровневые методы информатики и программирования. Тузовский А.Ф. - 77 стр.

UptoLike

Составители: 

77
4.6. Индексаторы
Индексаторы позволяют использовать для объекта класса опера-
цию получения или задания значения по индексу [i], точно также, как
у массивов или коллекций. В описании класса может быть только один
индексатор. Он имеет стандартное имя this, после которого в квад-
ратных скобках в заголовке перечисляются индексы, число которых
равно используемой размерности. Также как и свойства класса, индек-
сатор имеет методы get и set, которые описывают получение и зада-
ние значения для заданных индексов.
Например, в класс Person можно добавить закрытое поле child-
ren, описывающее массив детей человека, а доступ к нему можно вы-
полнять с использование индексатора:
const int Child_Max = 20; //максимальное число детей
Person[] children = new Person[Child_Max];
int count_children=0; //число детей
public Person this[int i] //индексатор
{
get {
if (i>=0 && i< count_children)
return(children[i]);
else return(children[0]);
}
set {
if (i==count_children && i< Child_Max)
{children[i] = value; count_children++;}
}
}
В методах get и set, обеспечивающих доступ к массиву child-
ren, по которому ведется индексирование, проверяется правильность
задания индекса. Закрытое поле count_children, хранящее текущее
число детей, доступно только для чтения благодаря добавлению соот-
ветствующего метода-свойства. Запись в это поле происходит в методе
set индексатора, когда к массиву children добавляется новый эле-
мент. Ниже показан пример использования индексатора:
Person p1 = new Person("Петров",42,20000);
Person p2 = new Person("Петров",22,10000);
p1[0] = p2;
Person p3= new Person("Петрова", 5,0);
p1[1] = p3;
Сonsole.WriteLine ("Фам={0}, возраст={1}, статус={2}",
P1.Fam, p1.Age, p1.Status);
Console.WriteLine ("Сын={0}, возраст={1}, статус={2}",