C# → Индексаторы

Индексаторы позволяют получить доступ к объекту, как будто это массив. Если определить для класса индексатор, это укажет компилятору, что делать если он встретит код, в котором экземпляр класса рассматривается так, как будто это массив.

Индексаторы определяются примерно также как и свойства (с использованием get и set). Основное отличие – что в качестве имени индексатора используется ключевое слово this.

Строка public double this[int i] говорит, что мы хотим рассматривать каждый экземпляр класса (структуры) Vector как одномерный массив с int в качестве индекса и что тип возвращаемого значения double.

Пример идексатора в C#:

        public double this[int i]
        {
            get
            {
                switch (i)
                {
                    case 0: return x; // break и не надо
                    case 1: return y; 
                    case 2: return z;
  // вызываем исключение
                    default: throw new IndexOutOfRangeException("Отсуствует эл." + i);
                }
            }
            set
            {
                switch (i)
                {
                    case 0: x = value; break;
                    case 1: y = value; break;
                    case 2: z = value; break;
                    default: throw new IndexOutOfRangeException("Отсуствует эл." + i);
                }
            }
        }