Разработка компиляторов

       

Индексаторы


Методы доступа в C# доступны не только для простых переменных, но и для элементов массивов. Пример описания индексатора показан на слайде. Из этого описания видно, что индексатор не может иметь произвольного имени; в данном примере мы использовали ключевое слово this как обозначение интерфейса, заданного по умолчанию. Если в классе реализовано несколько интерфейсов, то можно ввести и дополнительные индексаторы, обозначая их как InterfaceName.this . Наконец, заметим, что один и тот же массив можно индексировать с помощью переменных различных типов (например, используя int как ключ или string как имя для поиска в базе данных).

В качестве примера приведем класс, реализующий работу с квадратными матрицами. Понятно, что нам было бы привычнее иметь прямой доступ к элементам, т.е. писать просто A[i,j] , а не A.elements[i,j] . Реализуется это следующим образом:

public class Matrix { public const int n = 10; public int[,] elements = new int[n,n];

public int this[int i, int j] { get { return elements[i,j]; } set { elements[i,j] = value; } } }

При таком описании допустимо следующее использование:

Matrix a = new Matrix(); a[0,0] = 1; a[1,5] = 5; Matrix b = new Matrix(); b[0,0] = -4; b[1,5] = 10;



Содержание раздела