Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что такое индексаторы? Что такое индексаторы? 
:(
    Опции темы
jeans1986
Дата 4.9.2007, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 31.3.2007

Репутация: нет
Всего: нет



Здравсвуйте. Я новичок и не понля что такое индексаторы? Как их применять? Заранее благодарю.
PM MAIL   Вверх
SpaceSpace
Дата 4.9.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: 2
Всего: 10



Индексатор позволяет работать с классом или структурой таким образом, как если бы это были массивы. Индексация класса выполняется по индексу, указываемому как параметр. Иногда классы, используемые как индексаторы, называют классами-индексаторами.




--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
andrx
Дата 4.9.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



Индексаторы целесообразно использовать в том случае, если существует необходимость в обработке совокупности однотипных объектов.
(В прочем, к примеру, Байдачный в своей книге показал пример решения вычисления факториала с помощью индексатора.)

Например, грубо говоря, есть приложение, обрабатывающее данные по парку машин. В приложении существует класс МАШИНА.

Т.е. у нас есть совокупность однотипных объектов - парк машин, состоящий из множества машин.
Так вот, парк машин можно реализовать как индексатор, в котором содержится множество(коллекция) машин.

При этом обращение к элементу коллекции, можно организовать не только через индекс, но и через имя или даже через значения свойств объектов, находящихся в коллекции (если конечно эти свойства уникально идентифицируют объект).

Т.е. в приведенном примере можно организовать доступ к машине как через индекс, так и через номер машины.

Удобство состоит в обращении к элементам таким же способом, как и к элементам массива.

--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
mihryak
Дата 4.9.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



ещё индексаторы могут помочь скрыть устройство внутренней коллекции (Dictionary, к примеру), обращение к ней будет не через вынесенное свойство и не через методы доступа, а через удобные индексы.
PM MAIL ICQ   Вверх
a_n_d_y
Дата 7.9.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 23.10.2006
Где: Ukraine::Kiev

Репутация: нет
Всего: 1



аналог operator[] из С++...
PM MAIL ICQ Skype MSN   Вверх
Kefir
Дата 11.9.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



скину примерчик:
Код

enum Language { Russian, English };
class MultiLanguageString
{
  private string[] _Translations;
  public Foo()
  {
    this._Translations = new string[] { "Русский", "English" };
  }

  // Вот это и есть индексер:
  public string this[Language index]
  {
    get
    {
      if((int)index >= 0 && (int)index < this._Translations.Count) return this._Translations[(int)index];
      else throw new Exception("Translation does not exist (index out of bounds)!");
    }
    set
    {
      if((int)index >= 0 && (int)index < this._Translations.Count) this._Translations[(int)index] = value;
      else throw new Exception("Cannot set translation (index out of bounds)!");
    }
  }  

}

// Теперь можно обращаться к переводам так:

MultiLanguageString str = new MultiLanguageString();
string english = str[Language.English];
string russian = str[Language.Russian];

PM MAIL WWW Skype   Вверх
mr.DUDA
Дата 12.9.2007, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Более удачный пример - квадратные скобки при работе с Dictionary или Hashtable.


--------------------
user posted image
PM MAIL WWW   Вверх
Kefir
Дата 12.9.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



Может быть. Я просто показал как ими пользоваться в своих классах
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0957 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.