C# — индексаторы
Индексатор позволяет индексировать объект, например массив. Когда вы определяете индексатор для класса, этот класс ведет себя подобно виртуальному массиву. . Затем вы можете получить доступ к экземпляру этого класса с помощью оператора доступа к массиву ([ ]).
Синтаксис
Одномерный индексатор имеет следующий синтаксис —
element-type this[int index] { // The get accessor. get { // return the value specified by index } // The set accessor. set { // set the value specified by index } }
Использование индексаторов
Объявление поведения индексатора в некоторой степени похоже на свойство. аналогично свойствам, вы используете get и установить средства доступа для определения индексатора. Однако свойства возвращают или задают определенный член данных, тогда как индексаторы возвращают или задают конкретное значение из экземпляра объекта. Другими словами, он разбивает данные экземпляра на более мелкие части и индексирует каждую часть, получает или устанавливает каждую часть.
Определение свойства включает предоставление имени свойства. Индексаторы определяются не именами, а тегом this. ключевое слово, которое ссылается на экземпляр объекта. Следующий пример демонстрирует концепцию —
Живая демонстрацияusing System; namespace IndexerApplication { class IndexedNames { private string[] namelist = new string[size]; static public int size = 10; public IndexedNames() { for (int i = 0; i < size; i++) namelist[i] = "N. A."; } public string this[int index] { get { string tmp; if( index >= 0 && index <= size-1 ) { tmp = namelist[index]; } else { tmp = ""; } return ( tmp ); } set { if( index >= 0 && index <= size-1 ) { namelist[index] = value; } } } static void Main(string[] args) { IndexedNames names = new IndexedNames(); names[0] = "Zara"; names[1] = "Riz"; names[2] = "Nuha"; names[3] = "Asif"; names[4] = "Davinder"; names[5] = "Sunil"; names[6] = "Rubic"; for ( int i = 0; i < IndexedNames.size; i++ ) { Console.WriteLine(names[i]); } Console.ReadKey(); } } }
Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A.
Перегруженные индексаторы
Индексаторы могут быть перегружены. Индексаторы также могут быть объявлены с несколькими параметрами, и каждый параметр может быть другого типа. Необязательно, чтобы индексы были целыми числами. C# позволяет использовать индексы других типов, например строку.
В следующем примере демонстрируются перегруженные индексаторы —
Живая демонстрацияusing System; namespace IndexerApplication { class IndexedNames { private string[] namelist = new string[size]; static public int size = 10; public IndexedNames() { for (int i = 0; i < size; i++) { namelist[i] = "N. A."; } } public string this[int index] { get { string tmp; if( index >= 0 && index <= size-1 ) { tmp = namelist[index]; } else { tmp = ""; } return ( tmp ); } set { if( index >= 0 && index <= size-1 ) { namelist[index] = value; } } } public int this[string name] { get { int index = 0; while(index < size) { if (namelist[index] == name) { return index; } index++; } return index; } } static void Main(string[] args) { IndexedNames names = new IndexedNames(); names[0] = "Zara"; names[1] = "Riz"; names[2] = "Nuha"; names[3] = "Asif"; names[4] = "Davinder"; names[5] = "Sunil"; names[6] = "Rubic"; //using the first indexer with int parameter for (int i = 0; i < IndexedNames.size; i++) { Console.WriteLine(names[i]); } //using the second indexer with the string parameter Console.WriteLine(names["Nuha"]); Console.ReadKey(); } } }
Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A. 2
Язык C
- C# Hello World — ваша первая программа на C#
- Ключевые слова и идентификаторы C#
- Переменные C# и (примитивные) типы данных
- Операторы С#
- Побитовые операторы C# и операторы сдвига битов
- Базовый ввод и вывод C#
- Выражения, операторы и блоки C# (с примерами)
- С# Комментарии
- Оператор переключения C#
- С# тернарный (?:) оператор