
- •Дополнительные члены класса
- •Примечание 1.
- •Синтаксис определения метода-оператора
- •Правила перегрузки операторов
- •При перегрузке бинарных операторов хотя бы один из операндов должен совпадать по типу
- •Файл ClassDate.cs:
- •public ClassDate(int month, int year)
- •Файл Class1.cs:
- •Свойства
- •Синтаксис определения свойства
- •access – уровень доступа (обычно выбирается public),
- •В определении свойства могут присутствовать
- •Если свойство поставлено в
- •Простой пример определения свойства.
- •Использование свойства :
- •Индексаторы
- •НО использование индексаторов не позволяет использовать методы класса Array подобно обычным массивам.
- •Одномерные индексаторы
- •elem_type – базовый тип индексатора:
- •access elem_type this [form_param_list]
- •Пример 1. Индексатор, контролирующий доступ к массиву. Для сокращения кода переменные len и
- •public int this [int index]
- •Использование индексатора:
- •Программа напечатает:
- •Пример 2. Индексатор только для чтения, несвязанный с массивом,
- •Программа напечатает:
- •Вложенные типы

НО использование индексаторов не позволяет использовать методы класса 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