Интерфейсные индексаторы C#

Интерфейсные индексаторы C#, Интерфейсы в C#, Объявления интерфейсного индексатора в C#, C# Полное руководство Герберт Шилдт, Язык программирования C#, C# полное руководство

В интерфейсе можно также указывать индексаторы. Ниже приведена общая форма объявления интерфейсного индексатора.

// Интерфейсный индексатор
тип_элемента this[int индекс]{
   get;
   set;
}

Как и прежде, в объявлении интерфейсных индексаторов, доступных только для чтения или только для записи, должен присутствовать единственный аксессор: get или set соответственно.
Ниже в качестве примера приведен еще один вариант реализации интерфейса ISeries, в котором добавлен индексатор только для чтения, возвращающий f-й элемент числового ряда.

// Добавить индексатор в интерфейс.

using System;

public interface ISeries {
   // Интерфейсное свойство.
   int Next {
      get; // возвратить следующее по порядку число
      set; // установить следующее число
   }

   // Интерфейсный индексатор.
   int this [int index] {
      get; // возвратить указанное в ряду число
   }
}

// Реализовать интерфейс ISeries.
class ByTwos : ISeries {
   int val;

   public ByTwos () {
      val = 0;
   }

   // Получить или установить значение с помощью свойства.
   public int Next {
      get {
         val += 2;
     return val;
      }
      set {
         val = value;
      }
   }

   // Получить значение по индексу.
   public int this[int index] {
      get {
         val = 0;
         for(int i=0; i < index; i++)
        val += 2;
     return val;
      }
   }
}

// Продемонстрировать применение интерфейсного
// индексатора.
class SeriesDemo4 {
   static void Main() {
      ByTwos ob = new ByTwos ();

   // Получить доступ к последовательному ряду чисел с помощью свойства.
   for(int i=0; i < 5; i++)
      Console.WriteLine(
                              "Следующее число равно " + ob.Next);

   Console.WriteLine("/nНачать с числа 21");
   ob.Next =21;
   for(int i=0; i < 5; i++)
      Console.WriteLine(
                     "Следующее число равно " + ob.Next);

   Console.WriteLine("/nСбросить в 0");
   ob.Next = 0;

   // Получить доступ к последовательному ряду чисел с помощью индексатора
   for(int i=0; i < 5; i++)
      Console.WriteLine(
                      "Следующее число равно " + ob[i]);
   }
}

Вот к какому результату приводит выполнение этого кода:
   Следующее число равно 2
   Следующее число равно 4
   Следующее число равно 6
   Следующее число равно 8
   Следующее число равно 10

   Начать с числа 21
   Следующее число равно 23
   Следующее число равно 25
   Следующее число равно 27
   Следующее число равно 29
   Следующее число равно 31

   Сбросить в 0
   Следующее число равно 0
   Следующее число равно 2
   Следующее число равно 4
   Следующее число равно 6
   Следующее число равно 8