Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция10 Безопасность 2018.pptx
Скачиваний:
12
Добавлен:
08.12.2019
Размер:
149.27 Кб
Скачать

НО использование индексаторов не позволяет использовать методы класса Array подобно обычным массивам.

Действует индексатор подобно свойству

упрощает синтаксис, «пряча» вызов соответствующих методов.

Так же, как и свойство, индексатор

контролирует доступ к данным.

В соответствии с размерностью индексации различают одномерные и многомерные индексаторы.

22

Одномерные индексаторы

Синтаксис определения одномерного индексатора :

access elem_type this [param_type param_name]

{

get

{

statements

}

set

{

statements

}

}

23

elem_type – базовый тип индексатора:

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

Блоки get и set имеют тот же смысл, что и для свойств.

Чаще всего используются формальные параметры типа int.

Многомерные индексаторы

Определение отличается от одномерного количеством параметров-индексов:

24

access elem_type this [form_param_list]

{

get

{

statements

}

set

{

statements

}

}

Аналогично одномерным индексаторам чаще всего ограничиваются целочисленными параметрами.

25

Пример 1. Индексатор, контролирующий доступ к массиву. Для сокращения кода переменные len и flag объявлены с уровнем доступа public (исправьте это самостоятельно).

Объявление класса с индексатором:

class ArrTest

{

private int [ ] a;

public int len;

public bool flag;

public ArrTest (int size)

{

a = new int[size];

len = size;

}

26

public int this [int index]

{

get

{

if (index >= 0 & index < len)

{

flag = false;

return a[index];

}

else

{

flag = true;

return 0;

}

}

27

set

{

if (index >= 0 & index < len)

{

flag = false;

a[index] = value;

}

else

{

flag = true;

}

}

}

28

Использование индексатора:

class TestInd

{

public static void Main ()

{

ArrTest obj = new ArrTest (5);

int x;

for (int i = 0; i<(obj.len*2); i++)

obj[i]=i*10; // метод доступа set

for (int i = 0; i<(obj.len*2); i++)

{

x=obj[i]; // метод доступа get

Console.Write(x+" ");

}

Console.WriteLine ( );

29

for (int i = 0; i<(obj.len*2); i++)

{

obj[i]=i*10;

if (obj.flag)

Console.WriteLine ("index "+i+" out of bound");

}

for (int i = 0; i<(obj.len*2); i++)

{

x=obj[i];

if (obj.flag)

Console.WriteLine ("index "+i+" out of bound");

}

}

}

30

Программа напечатает:

0 10 20 30 40 0 0 0 0 0

index 5 out of bound

index 6 out of bound

index 7 out of bound

index 8 out of bound

index 9 out of bound

index 5 out of bound

index 6 out of bound

index 7 out of bound

index 8 out of bound

index 9 out of bound

31