Индексирующее свойство C#

Индексирующее свойство 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#.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *