Индексатор (программирование)
Эта статья может сбивать с толку или быть непонятной читателям . В частности, это C# или общая концепция объектно-ориентированного программирования? Конечно, интересно использование ключевого слова «это», а не то, что здесь подчеркивается? Почему вся эта статья связана только с одним сообщением на форуме C# (другое сообщение на форуме является мертвой ссылкой). Возможно, пример использования примера класса продемонстрирует назначение конструкции. Arc.Ask3.Ru не является руководством, путеводителем или учебником WP:NOTHOWTO .. ( Апрель 2015 г. ) |
В объектно-ориентированном программировании индексатор . позволяет индексировать экземпляры определенного класса или структуры точно так же, как массивы [1] Это форма перегрузки операторов .
Реализация [ править ]
Индексаторы реализуются через методы доступа get и set для operator[]
. Они похожи на свойства , но отличаются тем, что не являются статическими и тем, что методы доступа индексаторов принимают параметры. Аксессоры get и set вызываются как методы с использованием списка параметров объявления индексатора, но аксессор set по-прежнему имеет неявное значение. value
параметр.
Пример [ править ]
Вот пример C# использования индексатора в классе: [2]
class Family
{
private List<string> _familyMembers = new List<string>();
public Family(params string[] members)
{
_familyMembers.AddRange(members);
}
public string this[int index]
{
// The get accessor
get => _familyMembers[index];
// The set accessor with
set => _familyMembers[index] = value;
}
public int this[string val]
{
// Getting index by value (first element found)
get => _familyMembers.FindIndex(m => m == val);
}
public int Length => _familyMembers.Count;
}
Пример использования:
void Main()
{
var doeFamily = new Family("John", "Jane");
for (int i = 0; i < doeFamily.Length; i++)
{
var member = doeFamily[i];
var index = doeFamily[member]; // same as i in this case, but it demonstrates indexer overloading allowing to search doeFamily by value.
Console.WriteLine($"{member} is the member number {index} of the {nameof(doeFamily)}");
}
}
В этом примере индексатор используется для получения значения в n-й позиции, а затем для получения позиции в списке, на которую ссылается его значение. Вывод кода:
John is the member number 0 of the doeFamily Jane is the member number 1 of the doeFamily
См. также [ править ]
Ссылки [ править ]
- ^ jagadish980 (29 января 2008 г.). «C# — Что такое индексатор в C#» . ФОРУМЫ SURESHKUMAR.NET . Архивировано из оригинала 22 сентября 2009 года . Проверено 1 августа 2011 г.
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ «Вопросы для собеседования по C#» . .net Фунда . Проверено 1 августа 2011 г.