C Sharp > ИНДЕКСИРУЮЩЕЕ СВОЙСТВО C#
28.10.2016 14:54:35
Наиболее часто встречающиеся слова в статье:
[свойство] [Console] [индексу] ["Property"] [ private] [ get] [ set] [WriteLine] [реализовать] [ case]
Статья:
Данное свойство используется, если необходимо иметь доступ к элементу по
индексу. Давайте сразу на примере реализуем. Создадим класс "Point", который
содержит координаты "x" и "y". Данные поля будут приватными. Также создадим 2
свойства ("Property") для доступа к приватным полям класса, которые будут
публичными:
class Point
{
private int x;
private int y;
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
}
Теперь сделаем так, чтобы можно было обращаться к данным полям по индексу. Т.е.
мы хотим, чтобы было так:
Point point1 = new Point();
point1.X = 50;
point1.Y = 100;
Console.WriteLine("({0},{1})", point1[0], point1[1]);
Console.ReadLine();
Для того, чтобы реализовать оператор индексации для этого класса, нужно
реализовать индексирующее свойство. Реализуется оно следующим образом:
public int this[int i]
{
get
{
switch(i)
{
case 0: return this.X;
case 1: return this.Y;
// В случае неверного индекса выбрасываем исключение.
default: throw new ArgumentOutOfRangeException("Неверный индекс");
}
}
}
В данном случае мы реализовали только "getter", т.е. мы сможем только прочитать
значения. Реализуем "setter":
set
{
switch (i)
{
case 0:
{
this.X = value;
break;
}
case 1:
{
this.Y = value;
break;
}
default: throw new ArgumentOutOfRangeException("Неверный индекс");
}
}
Используем наше свойство в деле:
point1[0] = 100;
point1[1] = 200;
Console.WriteLine("({0},{1})", point1[0], point1[1]); // выйдет (100,200)
Ещё раз хочу обратить ваше внимание на синтаксис создание индексирующего
"Property": this[int x]. Причем через запятую можно указать множество индексов.
Индекс необязательно должен быть типа "int".