В объектно-ориентированном программировании индексатор позволяет индексировать экземпляры определенного класса или структуры так же, как массивы. [ 1] Это форма перегрузки операторов .
Индексаторы реализуются через методы доступа get и set для . Они похожи на свойства , но отличаются тем, что не являются статическими , и тем, что методы доступа индексаторов принимают параметры. Методы доступа get и set вызываются как методы с использованием списка параметров объявления индексатора, но метод доступа set по-прежнему имеет неявный параметр.operator[]
value
Вот пример использования индексатора в классе на языке C#: [2]
класс Семья { частный Список < строка > _familyMembers = новый Список < строка > (); public Family ( строка параметров [ ] члены ) { _familyMembers.AddRange ( члены ) ; } public string this [ int index ] { // Метод доступа get get => _familyMembers [ index ]; // Метод доступа к множеству с set => _familyMembers [ index ] = value ; } public int this [ string val ] { // Получение индекса по значению (первый найденный элемент) get => _familyMembers . FindIndex ( m => m == val ); } public int Длина => _familyMembers . Количество ; }
Пример использования:
void Main () { var doeFamily = new Family ( "John" , "Jane" ); for ( int i = 0 ; i < doeFamily . Length ; i ++ ) { var member = doeFamily [ i ]; var index = doeFamily [ member ]; // то же, что и i в этом случае, но демонстрирует перегрузку индексатора, позволяющую искать doeFamily по значению. Console . WriteLine ( $"{member} — это номер члена {index} {nameof(doeFamily)}" ); } }
В этом примере индексатор используется для получения значения в n-й позиции, а затем для получения позиции в списке, на которую ссылается его значение. Вывод кода:
Джон — член семьи doeFamily под номером 0.Джейн — член номер 1 в doeFamily
{{cite web}}
: CS1 maint: numeric names: authors list (link)