This article may be confusing or unclear to readers. In particular, is this a C# or a general OO concept? Surely the interesting thing is the use of the keyword 'this', not what is emphasised here? Why is this whole article only sourced to one C# forum post (the other forum post is a dead link). Maybe an example of use of the example class would demonstrate the purpose of the construct. Wikipedia is not a manual, guidebook or textbook WP:NOTHOWTO.. (April 2015) |
В объектно-ориентированном программировании индексатор позволяет индексировать экземпляры определенного класса или структуры так же, как массивы. [ 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