[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Учим C#: №7
TwitДата: Воскресенье, 17.03.2013, 12:42 | Сообщение # 1
Нет аватара
Приятно Царь

Сообщений: 42
Награды: 7


« -5 »

Оффлайн
Сегодня я хотел бы рассказать о других, пропущенных членах классов, т.к. время уже пришло. В прошлой статье я говорил о перегрузке операторов. Существует специальный оператор, предназначенный для индексирования массива - []. И его нельзя перегрузить. Хотя нет, можно, но при выполнении следующего условия: перегружать его только для тех объектов, сущностью которых является массив каких-либо элементов. И адресовать этот индексатор будет не различные элементы массива объектов, а какой-либо массив, являющийся членом объекта.
Далее приведен общий формат определения одномерного индексатора.
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 указывает на значение, возвращаемое методом чтения объекта слева. Вроде просто и красиво, а кое-где даже полезно.




Кризис.Разные мнения.Идеи.

Первое правило шахмат - хочешь быть умнее? Играй с более умным соперником.
  • Страница 1 из 1
  • 1
Поиск: