Индексирующее свойство C#
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы поговорили про структуры в C#. В данной небольшой статье я бы хотел поговорить про индексирующее свойство в C#. Данное свойство используется, если необходимо иметь доступ к элементу по индексу. Давайте сразу на примере реализуем. Создадим класс "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".
В качестве домашнего задания: необходимо сделать, чтобы к полям можно был обращаться следующим образом: point1['x'] или point1['y'].
В данной статье вы узнали, как создать индексирующее свойство на C#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.