Сегодня я хотел бы рассказать о других, пропущенных членах классов, т.к. время уже пришло. В прошлой статье я говорил о перегрузке операторов. Существует
специальный оператор, предназначенный для индексирования массива - []. И его нельзя перегрузить. Хотя нет, можно, но при выполнении следующего условия:
перегружать его только для тех объектов, сущностью которых является массив каких-либо элементов. И адресовать этот индексатор будет не различные элементы массива объектов, а какой-либо массив, являющийся членом объекта.
Далее приведен общий формат определения одномерного индексатора.
public возвращаемый_тип this[int index]
{
get{тело_метода_чтения;}
set{тел_ метода_установки;}
}
Чтоб было понятнее, определим индексатор для нашего класса Matrix...
using Sc=System.Console;
class Matrix// класс матрицы
{
private int[,] element=new int[4,4];
//-------Ну-а-теперь-время-----
//-------определить-индексатор-
public int this[int i,int j]
{
//Метод доступа для чтения
get
{
return element[i,j];
}
//Метод доступа для установки
set
{
element[i,j]=value;
}
}
}
class Application
{
public static void Main()
{
Matrix matrix1=new Matrix();
int i,j;//для цикла
//Установим разные значения
//элементов матрицы при помощи
//определенного индексатора
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
matrix1[i,j]=i+j;
}
}
//Теперь точно таким же способом
//сделаем вывод на консоль
for(i=0;i<4;i++)
{
for(j=0;j<4;j++) Sc.Write(" "+matrix1[i,j]);
Sc.WriteLine();
}
Sc.Write("Нажмите ENTER для выхода.");
Sc.ReadLine();
}
}
Теперь немного слов. Здесь в теле метода set вы должны были обратить внимание, что переменная с именем value нигде не определена. В этом случае value является ключевым словом, указывающим неявно на значение выражения справа от оператора присваивания. get и set также являются ключевыми словами, они являются специальными методами. Если рассмотреть, например, такую строку:
matrix1[i,j]=matrix2[j,i];
то вызывается метод get объекта matrix1 и метод set объекта, а value указывает на значение, возвращаемое методом чтения объекта слева. Вроде просто и красиво, а кое-где даже полезно.