Книга: C# для профессионалов. Том II
Индексаторы
Индексаторы
C# cтрого не разрешает перезагружать []
. Однако он позволяет определить так называемые индексаторы (indexer) класса, что обеспечивает такой же результат.
Синтаксис определении индексатора очень похож на синтаксис свойства. Предположим, что необходимо использовать экземпляры MyClass
как массив, где каждый элемент индексируется с помощью int
и возвращает long
. Тогда можно сделать следующую запись:
class MyClass {
public long this[int x] {
get {
// код для получения элемента
}
set {
// код для задания элемента, например X = value;
}
}
// и т.д.
Код внутри блока get
выполняется всякий раз, когда Mine[x]
стоит с правой стороны выражения (при условии, что выражение Mine
является экземпляром MyClass
и x
будет int
), в то время как блок
set выполняется только тогда, когда Mine[x]
указывается с левой стороны выражения. Блок set
ничего не может вернуть и использует ключевое слово value
для указания величины, которая появится с правой стороны выражения. Блок get
должен вернуть тот же тип данных, который имеет индексатор.
Можно перезагружать индексаторы, чтобы использовать любой тип данных в квадратных скобках или любое число аргументов, тем самым создавая эффект многомерного массива.