Главная » Просмотр файлов » Г. Шилдт - С# 3.0 Полное руководство. 2010

Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 182

Файл №1160798 Г. Шилдт - С# 3.0 Полное руководство. 2010 (Г. Шилдт - С# 3.0 Полное руководство. 2010) 182 страницаГ. Шилдт - С# 3.0 Полное руководство. 2010 (1160798) страница 1822019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 182)

Применение перечислителя типе 1Рд.с~1о11атуЕпитеха~ое Если для организации коллекции в виде словаря, например типа НаянгаЬ1е, реализуется необобщенный интерфейс 1О1сс1опагу, то для циклического обращения к элементам такой коллекции следует использовать перечислитель типа 1рвсг1опагуЕпщлегагог вместо перечислителя типа 1Епивегагог.

Интерфейс 1О1сг1опагуЕпивегагог наследует от интерфейса 1Епивегагог и имеет три дополнительных свойства. Первым из них является следующее свойство: 01сггопагуЕпггу Едггу ( дев; ) Свойство епсгу позволяет получить пару "ключ — значение" из перечислителя в форме структуры О1СС1опагуЕпггу. Напомним, что в структуре Р1сгвопагуЕпггу определяются два свойства, Кеу н Ча1ие, с помощью которых можно получать доступ к ключу или значению, связанному с элементом коллекции. Ниже приведены два других свойства, определяемых в интерфейсе 1О1СС1опагудпивегагог.

оЬзесг Кеу ( Сеял оЬ)есг Ча1ие ( дегл ) С помощью этих свойств осуществляется непосредственный доступ к ключу или значению. Перечислитель типа 1Оасг1опагуЕппвегагог используется аналогично обычному перечислителю, за исключением того, что текущее значение в данном случае получается с помощью свойств епсгу, кеу или ча1ое, а не свойства соггепс. Следовательно, приобретя перечислитель типа 1О1011опагуЕппвегасог, необходимо вызвать метод моченехс (), чтобы получить первый элемент коллекции.

А для получения остальных ее элементов следует продолжить вызовы метода мочепехс () . Этот метод возвращает логическое значение га1яе, когда в коллекции больше нет ни одного элемента. В приведенном ниже примере программы элементы коллекции типа наяьсаь1е перечисляются с помощью перечислнтеля типа 1О1СС1опагуЕпивегагог. О Продемонстрировать применение перечислителя типа 101сгьооагуЕповегагог. чяьдд Яуягев; оя1пд Яуягев.со11есг1ооял 904 Часть 11.

Библиотека С() с1азз гпгсЕпцшпеюо ( зсасьс тот б Магп() ( // Создать хеш-таблицу. Назвсавуе ЬГ = пен НазпсаЬ1е(); // добавить элементы в таблицу. ЬГ.АгЫ("Кен", "555-7756"); Ьс.лоб("Мэри", "555-9876")7 ЛГ.Асб("Том", "555-3456")) ЬГ.Асб("Тодд", "555-3452")7 // Продемонстрировать применение перечислителя. 101сг1опагуепцшегагог егг = ьт.негепцшегагог()7 сопзо1е.иггге11пе("Отобразить информацию с помошью свойства епггу.")) ИЬ11е (ест.Мотеиехс () ) Сон зо 1е . Игт Се 11 не (ест. Епс ту. Кеу + ": егг.епггу.уа1ое)) Сопзо1е.нгьсетепе()7 сопзо1е.игггеьгпе("Отобразить информацию " + "с помощью свойств Кеу и Уа1ие.")т егг.невес()т нй11е (егг.

Мотеиехг () ) Сопзо1е.нг1севупе(ест.Кеу + ": " + ест.уа1пе) 7 Ниже приведен результат выполнения этой программы. Отобразить информацию с помошью свойства Епсгу. Том: 555-3456 Тодд: 555-3452 Мэри: 555-9876 Кен: 555-7756 Отобразить информацию с помощью свойств Кеу и Уа1пе. Том: 555-3456 Тодд: 555-3452 Мэри: 555-9876 Кен: 555-7756 Реализация интерфейсов ХЕпитетаЬ1е и ХЕпивета1ог Как упоминалось выше, для циклического обращения к элементам коллекции зачастую проще (да и лучше) организовать цикл Тогеасп, чем пользоваться непосредственно методами интерфейса 1Епцшегагог. Тем не менее ясное представление о принципе действия подобных интерфейсов важно иметь по еше одной причине: если требуется создать класс, содержащий объекты, перечисляемые в цикле гогеасп, то в этом классе следует реали- Глава 24. Коллекции, перечислвтелв в хтераторы 905 зовать интерфейсы 1Епивегагог и 1ЕпивегаЫе.

Иными словами, для того чтобы обратиться к объекту определяемого пользователем класса в питспе Гогеасп, необходимо реализовать интерфейсы 1епивегасог и 1ЕпивегаЫе в их обобщенной или необобщенной форме. Правда, сделать это будет нетрудно, поскольку оба интерфейса не очень велики.

На заиетку! Формально для обращения х обьектпам определяемого пользователем класса в цикле Гогеасп указывать интерфейс 1Епивегагог или 1епивегаЬ1е как реализуемый необязательно. Тем не менее в ятом классе должны быть предоставлены методы яесепивегасог (), ееяес (), моуенехс (), а также свойство сиггепс этих интерфейсов. Но если не указать эти интерфейсы, то такой класс окажется малопригодным в среде многоязыкового программирован ия. В приведенном ниже примере программы интерфейсы 1Епивегагог и 1ЕпивегаЫЕ реализуются в необобщенной форме, с тем чтобы перечислить содержимое массива, инкапсулированного в классе МуС1аяз.

// Реализовать интерфейсы 1ЕпивегаЫе и 1Епивегагог. иягпр Яуягепи ия1пи Яуягев.Со11есглопят с1аяз МуС1аяя : 1Епивегагог, 1ЕпивегаЫе ( сваг() спгя = ( 'Л , В , 'С', 'П' )т тпг 1бх = -1) // Реализовать интерфейс 1епивегаЫе. риЬ11с 1Епивегагог ЕеСЕпивегаСог() ( гегигп СЬ1я) ) // В следуюпих методах реализуется интерфейс 1Епивегагог. // Возвратить текущий объект. риЫсс оЬ)есС Сиггепг [ Пес ( гегигп спгя[сбх); // Перейти к следующему объекту. риЫ1с Ьоо1 Мочеиехг() 11(гнх = спгя.ъепЧСЬ-1) ( Кеяег()т // установить перечислитель в конец гегигп Га1яе) ) гнхт+т гегигп Сгиет ) // Установить перечислитель в начало.

риЫ1с чола Веяег() ( юдх = -11 ) 906 часть П. Библиотека Сз с1аяя ЕпсвегаСог1вр1пево ( ягаС1с чогб Магп () ( МуС1аяя вс = пеи МуС1аяя () // Отобразить содержимое объекта вс. Гогеасл(сбег сП гп вс) сопяо1е.нг1се(сь т " ")) Сопяо1е.игъСеъьпе()) // Вновь отобразить содержимое объекта вс. гогеась(соаг съ 1п вс) Сопяо1е.нг1Се(сП + " "); Сопяо1е.иг1Сеъгпе()е ) Эта программа дает следующий результат: АВС О А В С П В данной программе сначала создается класс МуС1аяя, в котором инкапсулирустся небольшой массив типа спас, состоящий из символов А — В. Индекс этого массива хранится в переменной хс(х, инициализируемой значением — 1. Затем в классе МуС1аяя реализуются оба интерфейса, 1Еппвегагог и 1Еппвега)з1е. Метод ОВСЕпивегагог () возвращает ссылку на перечислитель, которым в данном случае оказывается текущий объект.

Свойство спггепс возвращает следующий символ в массиве, те. объект, указываемый по индексу 1С(Х. Метод мочепехС () перемещает индекс 1С(х В СлЕДУющее положение. Этот метод возвращает логическое значение га1яе, если достигнут конец коллекции, в противном случае — логическое значение сгпе. Напомним, что перечислитель оказывается неопределенным вплоть до первого вызова метода мочемехс () . Следовательно, метод моченехс () автоматически вызывается в цикле гогеас)г перед обращением к свойству спггепс.

Именно поэтому первоначальное значение переменной хс(х устанавливается равным — 1. Оно становится равным нулю на первом шаге цикла 1огеас)с Обобщенная реализация рассматриваемых здесь интерфейсов будет действовать по тому же самому принципу. Далее в методе Махп () создается объект вс типа МуС1аяя, и содержимое объекта дважды отображается в цикле г огеас)с Применение итераторов Как следует из предыдущих примеров, реализовать интерфейсы 1Еппвегагог и 1Епивега)о1е нетрудно.

Но еще проще воспользоваться итератором, который представляет собой метод, оператор или аксессор, возвращающий по очереди члены совокупности объектов от ее начала и до конца. Так, если некоторый массив состоит из пяти элементов, то итератор этого массива возвратит все эти элементы по очереди.

Реализовав итератор, можно обращаться к объектам определяемого пользователем класса в цикле 1огеас)с Глава 24. Коллекции, перечислители и итераторы 907 Обратимся сначала к простому примеру итератора. Приведенная ниже программа является переделанной версией предыдущей программы, в которой вместо явной реализации интерфейсов 1Епищегагог и 1ЕппщегаЬ|е применяется итератор.

// Простой пример применения итератора. гз1пд яузсели паапа Яувсещ.Со11есс1опвт с1авз МуС1азв ( спаг() спгз = ( 'А', 'В', 'С', 'О' )т // Этот итератор возвращает символы из массива сЬгв. рпЬ11с 1Епнщегасог Оескппщегасог() ( Гогеасп(спас сЬ ьп сЬгв) у1е1к( геспгп сЬт ) с1аав 1сгпещо ( вгагъс то1к) маъп() ( МуС1авв щс пеы МуС1авв()т Гогеасп(спас сЬ 1п щс) Сопзо1е.иггсе(сЬ в " "); Сопво1е.иг1сеътпе М ) ) При выполнении этой программы получается следующий результат: АВСО Как видите, содержимое массива щс.

сЬге перечислено. Рассмотрим эту программу более подробно. Во-первых, обратите внимание на то, что в классе мус1азз не указывается 1еппщегагог в качестве реализуемого интерфейса. При создании итератора компилятор реализует этот интерфейс автоматически. И во-вторых, обратите особое внимание на метод 6есЕппщегагог (), который ради удобства приводится ниже еще раз. // Этот итератор возвращает символы из массива спгв. рив11с 1Еппщегагог Оескппщегасог() ( Гогеасп(спас сЬ 1п сЬгв) у1е1к) гесигп опт Это и есть итератор для объектов класса Мус1азз.

Как видите, в нем явно реализуется метод СеСЕппщегагог (), определенный в интерфейсе 1ЕппщегаЬ1е. А теперь перейдем непосредственно к телу данного метода. Оно состоит из цикла ЕогеасЬ, в котором возвращаются элементы из массива сйгз. И делается это с помощью оператора у1е1т( геспгп. Этот оператор возвращает следующий объект в коллекции, которым в данном случае оказывается очередной символ в массиве спгз.

Благодаря этому средству обращение к объекту щс типа МуС1азз организуется в цикле гогеасЬ в методе Мауп () . 908 Часть 11, Библиотега С№ Обозначение уфе1б служит в языке С№ в качестве контекстного ключевого слова. Это означает, что оио имеет специальное назначение только в блоке итератора. А вие этого блока оио может быть использовано аналогично любому другому идентификатору. Следует особо подчеркнуть, что итератор ие обязательно должен опираться иа массив или коллекцию другого типа. Ои должен просто возвращать следующий элемент из совокупности элементов. Это означает, что элементы могут быть построены динамически с помощью соответствующего алгоритма.

В качестве примера ниже приведена версия предыдущей программы, в которой возвращаются все буквы английского алфавита, набранные в верхнем регистре. Вместо массива буквы формируются в цикле гог. // Пример динамического построения значений, // возвращаемых по очереди с помощью итератора. оя1ЬЧ зуясеве оя1ЬЧ 5уясев.со11ессьопщ с1аяя Мус1аяя ( сьяг сЬ = 'А'ь // Этот итератор ноззращает буквы английского // алфавита, набранные з верхнем регистре.

рпЬ11с 1Еппвегясог пеГЕппвегягог() ( Гог(ьпс 1=0) 1 с 20) 1ьь) уье16 гессгп (спаг) (сп + 1); ) ) с1аяя 1ггпево2 ( ясасьс но1б Ма1п() ( МуС1аяя вс = пен МуС1аяя() Гогеясь(сЬаг сЬ ьп вс) Сопяо1е.иг1се(сЬ + " "); Сопяо1е.игьсевьпе() ) ) Вот к какому результату приводит выполнение этой программы: А В С ОЕ ГВН 1 ЗКЬМИОРОК5 ТОНИ ХУ 2 Прерывание итератора Для преждевременного прерывания итератора служит следующая форма оператора у1е1с1: у1е1я( Ьгеаиы Когда этот оператор выполняется, итератор уведомляет о том, что достигиут конец коллекции. А зто, по существу, останавливает сам итератор.

Приведенная ниже программа является версией предыдущей программы, переделанной с целью отобразить только первые десять букв английского алфавита. Глава 24. Коллекции, лервчислители и итераторы 909 // Пример прерывания итератора. пз1пд зузсеи) пз1пд Вузкев.Со11есгьопзт с1аяя МуС1азя ( айаг сй = 'А'т // Этот итератор возвращает первые 10 букв // английского алфавита. рпЬ11с 1Еппиегаког ВесЕппзегагог() ( гог(1пс 1=0; 1 < 26) 1++) ( 1г(1 = 10) у1е1б Ьгеаит // преждевременно прервать итератор у1е1т( гестаса (сйаг) (сй ч 1) ) ) ) ) с1азз 1Сгреиоз ( зкаг1с зо10 Малп() ( МуС1азз ис = пен МуС1азз()т гогеасй(сйаг сй 1п зс) Сопзо1е.игьсе(сй ь " ")) Сопзо1е.иглгеЬЕпе()) ) ) Эта программа дает следующий результат: АВС ОЕ ГОН 1 0 Применение нескольких операторов уй.е16 В итераторе допускается применение нескольких операторов у1е1ой Но каждый такой оператор должен возвращать следующий элемент в коллекции.

В качестве примера рассмотрим следующую программу; // Пример применения нескольких операторов у1е1с). паапа Вузгеит пзьпо зуягем.Со11есс1опз) с1азз МуС1азз ( // Этот итератор возвращает буквы А, В, С, О и Е. рпй11с 1кппиегасог ВеСЕппиегаког() ( уье1б гегпгп 'А'т у1е1б гегпгп 'В'т у1е10 гессгп 'С'т у1е1к) гегпгп 'О' т у1е1б геспгп 'Е') 910 Часть П. Библиотека С() с1ввв 1ггоево5 ( вкасхс вохс Мвхп() ( МуС1аяв вс = пен МуС1ввв() гогеась(сваг сь гп вс) Сопво1е.нгьге(сь + " "); I Сопво1е.нгггеъ1пе()к ) Ниже приведен результата выполнения этой программы. (АВСОЕ В данной программе в методе Пескппвегагог () вЫполняютсЯ пять оПЕРатоРов у1е1к). Следует особо подчеркнуть, что они выполняются по очереди и каждый раз, когда из коллекции получается очередной элемент.

Характеристики

Тип файла
DJVU-файл
Размер
6,78 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Г. Шилдт - С# 3.0 Полное руководство
C_sharp_3TCR_code
Apndx.lst
Chap2.lst
Chap3.lst
Chap4.lst
Chap5.lst
Chap6.lst
Chap7.lst
Chap8.lst
Chap9.lst
Chap10.lst
Chap11.lst
Chap12.lst
Chap13.lst
Chap14.lst
Chap15.lst
Chap16.lst
Chap17.lst
Chap18.lst
Chap19.lst
Chap20.lst
Chap21.lst
Chap22.lst
Chap23.lst
Chap24.lst
Chap25.lst
Chap26.lst
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6455
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее