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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос? Индексаторы, Помогите новичку разобратся 
:(
    Опции темы
Neuromancer
  Дата 1.9.2006, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Прошу учесть я в программировании совсем зеленый потихоньку продвигаюсь, конечно, ну вопросов ну просто море  smile  хочу выучить С# тяжко уж как-то  без знания языка  программирования хоть один язык выучить (ну вот еще один решил пополнить ряды NET программистов) ну вот решил изучать, а для общения и поднятия квалификации выбрал САМЫЙ ЛУЧШИЙ ФОРУМ В СЕТИ ЭТО- http://forum.vingrad.ru – кстати я недавно наткнулся в сети на ВИНОГРАД и когда увидел у меня чуть глаз не выпал  smile  тут есть все
и  .NET и PHP и Базы данных ну очень много всего интересного взять бы и все созданные темы прочитать такой объем информации  жаль, человек ограничен по времени закачать бы всю эту базу форумов прямо в мозг  smile   
отвлекся малость   smile   
Собственно сам вопрос, что такое ИНДЕКСАТОРЫ для чего они вообще нужны, и как их использовать не забывайте я новичок, опишите, чтоб все понятно было, разложите по полочкам теорию и + какой нибуть пример с хорошо прокоментированным кодом.


Это сообщение отредактировал(а) Neuromancer - 1.9.2006, 12:19
PM MAIL   Вверх
ivashkanet
Дата 1.9.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Neuromancer, вступление мне понравилось  smile , но...

Все что ты просишь объснить --- очень подробно объяснено в книгах/учебниках по C#.
Ты хочешь чтобы мы привели цытаты?

Neuromancer, мой совет, возми любую книгу (лучше всего Троелсена), там все подробно об этом написано  smile 

Ну либо если хочешь все сейчас: http://www.intuit.ru/department/pl/csharp/16/3.html


PM MAIL WWW ICQ   Вверх
marcusmae
Дата 1.9.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


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

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



Попробую состроить из себя ivashkanet smile (в хорошем настроении)
Если речь идёт о свойствах-индексаторах, то на пальцах объяснил бы примерно так.
Пусть есть объект, который ты хочешь запрограть в библиотеку, и этот объект изначально подразумевает множественность. Допустим... сороконожка  smile Нелогично заставлять пользователя думать о ней, как о массиве ног, правда?;) Например, на такой случай можно употребить в классе индексатор :

Код

public class Сentipede
{
     // массив ног
     private Leg[] legsArray;

     // свойство-индексатор ног
     public Leg this[int index]
     {
           get { return this.legsArray[index]; }
           set { this.legsArray[index] = value; }
     }
     
     public Body body;
     // ... другие члены класса
}

public Leg
{
    public bool IsLeft;
    public bool IsRight;
    ...
}


Таким образом, получается возможность скрыть от детей и беременных женщин твою живодёрскую манеру хранить ноги где-то там в отдельном массиве, и получить ногу можно будет только по этому свойству-индексатору :

Код

Centipede centipede = new Centipede(...);
...
// получаем в переменную одну из ног
Leg leg = centipede[39];
// что-нить делаем
if (leg.IsRight) Console.WriteLine("Поздравляем, сегодня ты встала с той ноги!");


В этом примере я попытался показать, что свойство-индексатор иногда способно увеличить удобство использования классов. Кроме этого, не следует забывать что это - свойство, то есть, помимо возврата элементов массива, можно выполнять ещё какие-нибудь скрытые действия :

Код

     // свойство-индексатор ног
     public Leg this[int index]
     {
           get { return this.legsArray[index]; }
           set
           {
                 if (index < 40)
                     this.legsArray[index] = value;
                 else throw new ArgumentException("Дополнительные ноги не могут быть установлены.");
           }
     }


Более того, массива, который скрывается за свойством в этих примерах, может вообще не быть! = То есть, со стороны свойство-индексатор представляет какие-то элементы, как массив, но на самом деле они хранятся как-то иначе. На жирафах пример придумать не сумел, но напиши дополнительно, если не понятно.

Это сообщение отредактировал(а) marcusmae - 1.9.2006, 13:28


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
reloni
Дата 1.9.2006, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Индексаторы позволяют обращаться к полям твоего класса так же, как к массиву. 
Код

// массив
int[] arrray = new int[10];
// ...
// обращение к элементу массива через индекс
Console.WriteLine(array[5]);

Тоже самое можно сделать для своего класса.

class SimpleClass
{
    private ArrayList _array = new ArrayList();

    public SimpleClass()
    {
        this._array.Add("Москва");
        this._array.Add("Санкт-Петербург");
        this._array.Add("Калининград");
        this._array.Add("Астана");
    }

                // this означает, что это индексатор
    public string this[int index]
    {
        get 
        {
            if (index < this._array.Count  && index >= 0)
            {
                return this._array[index].ToString();
            }
            else
                throw new Exception();
        }
    }
}

public string this[int index]
Данный индексатор принимает один параметр типа int (может принимать больше одного), а возвращает string, в нашем случае название городаsmileтакже мы генерируем исключение, если индекс меньше нуля, или выходит за границы массива.

Код

SimpleClass cl1 = new SimpleClass();
Console.WriteLine(cl1[2]);
// выведет на консоль Калининград
Console.WriteLine(cl1[6]);
// исключение, в массиве нет элемента с таким индексом


Данный пример надуман, но как пример работы подходит я думаюsmile

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


Пока писал, уже опередили меняsmile

Это сообщение отредактировал(а) reloni - 1.9.2006, 13:05
PM MAIL ICQ   Вверх
ivashkanet
Дата 1.9.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



 smile 
Цитата(marcusmae @  1.9.2006,  13:03 Найти цитируемый пост)
Попробую состроить из себя ivashkanet 

smile А я тут причем smile 
И причем тут настроение? 
Понятно причем  smile 
У меня был только что митинг с заказчиком, вот я и злой на всех него  smile 
Прошу меня простить. А с утра я действительно мог чё-нить толковое написать
 smile  smile  smile 
P.S. А по сути я прав. Neuromancer, вот если бы спросил так: 
"Я вот прочитал про индексаторы, но ничего не понял smile Почему тут так и так и нафига нам такая вот штука, да и что вот это значит вообще..."
В общем, перед тем как спрашивать нужно было самому что-нить почитать  smile 

P.P.S. 
Цитата(reloni @  1.9.2006,  13:04 Найти цитируемый пост)
ps если мне не изменяет память, то в Троелсене ничего про индексаторы нет, во всяком случае вспомнить не могу.

226 страница  smile 

Это сообщение отредактировал(а) ivashkanet - 1.9.2006, 13:18
PM MAIL WWW ICQ   Вверх
reloni
Дата 1.9.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ivashkanet @  1.9.2006,  13:15 Найти цитируемый пост)
226 страница    

Действительноsmile
А я уже было думал, как он мог это упустить.
PM MAIL ICQ   Вверх
VisualProgrammerNET
Дата 1.9.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


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

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



Цитата(marcusmae @  1.9.2006,  13:03 Найти цитируемый пост)
"Дополнительные ноги не могут быть установлены."


 smile  smile  smile   smile 


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
Neuromancer
Дата 1.9.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибки всем огромное  я читал "Шилдг Г.Полный справочник по С#" но не до конца все понял в индексаторах, хотел, чтоб вы своими словами получше объяснили 
в следующий раз я буду поподробней писать, что я прочитал, и что я конкретно не понял (ой замучаю я вас своими вопросами  smile всех я вас очень понимаю, все мы иногда злые или добрые или некоторых бесит новички со своими глупыми вопросами  smile Всем еще раз огромное спасибо за помощь за совет и за ругань тоже. smile Я не просто спрашиваю, я читаю и если что-то не понятно я спрашиваю, извиняюсь 
что конкретнее вопрос не поставил, в следующем я все учту.
Да кстати спасибки за книжечку скал  smile 



"... то, что ты получаешь от общества, будет обществом в тебе и для тебя, 
так же как то, что ты даешь ему, будет твоим в обществе и для общества. 
Стремись получить от общества все, но не давай ему порабощать 
себя и не отдавайся ему полностью".
                                                                М. де Унамуно

жажда знаний, присущая всем людям, представляет собой неизлечимую болезнь.

Человек смертен, человечество бессмертно; человек ограничен, человечество обладает способностью к бесконечному развитию.
                       МИХОЭЛС С.М.

...Не имеет значения, что кто-либо говорит или делает...
              Т_ы_  с_а_м_ должен быть безупречным человеком...
                  ...Нам требуется все наше  время и вся
              наша  энергия, чтобы победить идиотизм в себе. Это
              и есть то,  что имеет значение.  Остальное  не имеет никакой
              важности...
                                                                  Дон Хуан
                                      (К. Кастанеда  "Второе Кольцо силы")


Это сообщение отредактировал(а) Neuromancer - 1.9.2006, 14:07
PM MAIL   Вверх
ivashkanet
Дата 1.9.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Цитата(Neuromancer @  1.9.2006,  14:04 Найти цитируемый пост)
ой замучаю я вас своими вопросами

Не волнуйся, нас просто так не возьмешь  smile 
Цитата(Neuromancer @  1.9.2006,  14:04 Найти цитируемый пост)
некоторых бесит новички со своими глупыми вопросами 

Некоторых (меня в частности) бесит не глупые вопросы, это не страшно, а нежелание думать самому (к тебе это не относится  smile , но я подумал, что ты один из них  smile ) smile 
Так что обращайся --- всегда рады помочь smile 
P.S. Всегда рады новым людям. Добро пожаловать.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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