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

Г. Шилдт - С#4.0 Полное руководство (1160795), страница 118

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

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

Итак, начнем с обобщенного интерфейса 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п () .

Вну- Глава 18. Обобщения 617 три этого метода применяется метод Е<[па1э (), который определяет равенство одного объекта другому. Для определения относительного порядка следования двух элементов применяется интерфейс 1СопрагаЬ1е.

У этого интерфейса имеются две формы: обобщенная и не- обобщенная. Обобщенная форма данного интерфейса обладает преимуществом обеспечения типовой безопасности, и поэтому мы рассмотрим здесь именно ее. Обобщенный интерфейс 1Сопрагабте<Т> объявляется следующим образом.

роЫ1с 1псегсасе 1СопрагаЫе<Т> Сравниваемый тип данных передается ему в качестве аргумента типа Т. В этом интерфейсе определяется метод СопрагеТо (), как показано ниже. Тпг СопрагеТо(Т огпег) В этом методе сравниваются вызывающий объект и другой объект, определяемый параметром оСЛег. В итоге возвращается куль, если вызывающий объект оказывается больше, чем объект оспег; и отрицательное значение, если вызывающий объект оказывается меньше, чем объект оСЛег. Для того чтобы воспользоваться методом Сопрагето (), необходимо указать ограничение, которое требуется наложить на аргумент типа для реализации обобщенного интерфейса 1СопрагаЬ1е<Т>. А затем достаточно вызвать метод СопрагеТо (), чтобы сравнить два экземпляра параметра типа. Ниже приведен пример применения обобщенного интерфейса 1СопрагаЬ1е<т>.

В этом примере вызывается метод 1пна оде (), возвращающий логическое значение сгпе, если объект оказывается среди элемеьпов отсортированного массива. Требуется обобщенный интерфейс 1СопрагаЫе<Т>. Е данном методе предполагается, что массив отсортироаан. Он возвращает логическое уу значение стае, если значение параметра нпас оказывается среди элементов УУ массива, передаваемых параметру оЬа.

риЫ>с зСаС1с Ьоо1 1пвапее<Т>(Т нпас, т[) оЬэ) нпеге Т: 1СопрагаЫе<Т> ( 11(<Лас.оопрагеТо(оЬэ[О]) < О нЛаС.Сопрагето(обэ[опа.ьепОСЛ-1)) > О) гегогп га1ве; гесчгп сгпе; В приведенном ниже примере программы демонстрируется применение обоих методов 1э1п () и 1пнапое () на практике. Продемонстрировать применение обобщенных интерфейсов 1СопрагаЬ1е<Т> и 1ЕЧпагаЫе<Т>. дэгпч Яуагеп; УУ Теперь а классе МуС1ааа реализуются обобщенные интерфейсы 1СопрагаЬ1е<Т> и 1Ес[иасаЬ1е<Т>. с1ааа МуС1аээ : 1сопрагаЬ1е<нус1ааэ>, 1ЕЧпагаЫе<нус1аээ> рчЫ>с 1пс ча1; РпЬ11с МуС1аээ(1пг х) ( Ча1 = х; Реализовать обобщенный интерфейс 1СопрагаЫе<Т>.

рпЫ1с ТпС СопрагеТо(муС1ааа огпег) 618 Часть (. Язык С(т гедотп Ча1 — отьег.Ча1; // Нои, по сает тя пеебеб. ) // Реализовать обобщенный интерфейс 1ес(цатаЬ1е<т>. рцЬ11с Ьоо1 Ес(ца1я(МЧС1аяя отлет) ( геботп Ча1 == оСЛег.уа11 ) О переопределить метод Ес(ца1я(ОЬ)ест). рцЬ11с очеггтс(е Ьоо1 Ес(ца1я(ОЪзесг оЬ1) ( ту(оЬО тя МуС1аяя) гетцгп Ес)ца1я ( (МТС1авя) оЬ1) ) гетцгп уа1яес ) Переопределить метод ОетНаяЛСос(е() рцЫтс очетттбе 1пт ОетНаяЛСобе() ( геяотп Ча1.6етнаяЛСобе() 1 ) ! с1аяя Сощрагепепю ( // Требуется обобщенньвс интерфейс 1Е<(цатаЫе<Т>. рцЬ1тс ятаттс Ъоо1 1я1п<т>(т илас, т() оЬя) иьете т : 1ес)цасаые<т> ( Тогеась(Т и тп оЬя) 11(Ч.Ес)ча1я(иЬаЫ ) // Применяется метод Ес(ца1я() гетцгп отце; гетптп Уа1яес О Требуется обобщенный интерфейс 1СощрагаЫе<Т>.

В данном методе предполагается, что массив отсортирован. Он возвращает логическое // значение отце, если значение параметра иьат оказывается среди элементов О массива, передаваемых параметру оЬя. рцЬ11с ятат1с Ьоо1 1пуап9е<Т>(Т иьат, Т() оЬв) иьеге Т : 1сощрагаЫе<Т> ту(иЛаЫСощратеТо(оЬя(0)) < 0 (( иЛаЫСощратето(оЬВ(оья.ьепчтЛ-1]) > 0) тегцтп уа1яес тетцгп тгце; ) Продемонстрировать операции сравнения.

ятаттс чойа Мати() ( // Применить метод 1я1п() к данным типа тпт. Тпт[] пцщя = ( 1, 2, 3, 4, 5 ); 11 (1я1п (2, пцщя) ) Сопяо1е.ыгттеьапе("Найдено значение 2.")) 11(1я1п(99, пшпя)) сопяо1е.хгттеЫпе("не подлежит выводу."); Глава 18. Обобщения 619 // Применить метод 1з1п() к объектам класса МуС1азз. МуС1аяя[) моя = ( лен Мус1аяя(1), лен МуС1аяя(2), пен МуС1аяз(З), пен МуС1аяя(4) )Г 11(1я1п(пен МуС1азя(3), моя)) Сопяо1е.иг1пе11пе("Найден объект МуС1аяя(3)."); 11 (1я1п (пен МуС1аяя (99), ися) ) Сопзо1е.Хгтбевъпе("Не подлежит выводу.") // Применить метод 1пнапэе() к данным типа Епп. 11(1пвапэе(2, пшпя)) Сопяо1е.игтбе51пе("Значение 2 находится в границах массива пшпя.")( 11(1пВапэе(1, пшпя)) Сопзо1е.иггбевапе("Значение 1 находится в границах массива пшпз.")( 11(1пВапве(5, пшяз)) Сопяо1е.Хг1сеьяпе("Значение 5 находится в границах массива пшпз.")( 11 (! 1пнапое (О, пшпя) ) сопзо1е.хггсеь1пе("значение 0 нЕ находится з границах массива пшпз.")( 11(!1пнапэе(б, пшпя)) Сопяо1е.иглгеьлпе("Значение б НЕ находится в границах массива пция.")( // Применить метод 1пяап9е() к объектам класса МуС1аяв., 11(1пвапое(пен МуС1аяз(2), моя)) Сопяо1е.нг1севвпе("Объект МуС1азз(2) находится в границах массива пшпз.")( гб(1пнапэе(пен МуС1аяя(1), моя)) Сопяо1е.иггбеввпе("Объект МуС1аяя(1) находится "в границах массива пшзз."); 1г(1пвап9е(пен МуС1аяя(4), вся)) Сопяо1е.Хглге11пе("Объект МуС1азя(4) находится " + "в границах массива пция.")( 11((1прапэе(пен МуС1аяя(0), шсз)) Сопяо1е.иг1ге11пе("Объект МуС1аяя(0) НЕ "находится в границах массива пшпя.")( тв(!1пвапэе(пен МуС1азз(5), вся)) Сопзо1е.игтпе11пе("Объект МуС1аяя(5) НЕ "находится в границах массива пшпя."); Выполнение этой программы приводит к следующему результату.

Найдено значение 2. Найден объект МуС1аяя(З). Значение 2 находится в границах массива пция. Значение 1 находится в границах массива пшпз. Значение 5 находится в границах массива пшпя. Значение 0 НЕ находится в границах массива пшля Значение б НЕ находится в границах массива пшпз Объект МуС1азя(2) находится в границах массива пция. Объект МуС1азя(1) находится в границах массива пцтпя.

Объект МуС1аяя(4) находится в границах массива пция. Объект МуС1аяя(0) НЕ находится в границах массива пция. Объект МуС1азз(5) НЕ находится в границах массива пшлз. 620 Часть ). Язык С№ ПРИМЕЧАНИЕ Если параметр типа обозначает ссылку или ограничение на базовый класс, то к зкземплярам объектов, определяемых таким параметром типа, можно применять операторы == и '.

=, хотя они проверяют на равенство только ссылки. А для сравнения значений придется реализовать интерфейс 16ощрагабте или же обобщенные интерфейсы ТбощрагаЬ1е<т> и ТВЧпатаЬ1е<т>. Иерархии обобщенных классов Обобщенные классы могут входить в иерархию классов аналогично необобщенным классам. Следовательно, обобщенный класс может действовать как базовый или производный класс. Главное отличие между иерархиями обобщенных и необобщенных классов заключается в том, что в первом случае аргументы типа, необходимые обобщенному базовому классу, должны передаваться всеми производными классами вверх по иерархии аналогично передаче аргументов конструктора. Применение обобщенного базового класса Ниже приведен простой пример иерархии, в которой используется обобщенный базовый класс.

Простая иерархия обобщенных классов. пятна Вуяоещ; Обобщенный базовый класс. с1аяя беп<Т> ( т оь; роЬ11с бел (Т о) ( оЬ = о; Возвратить значение переменной оЬ. роьттс т беяОЬП ( геьогп оЬ; ) /! Класс, производный от класса беп. с1аяя беп2<Т> : беп<Т> роЬ11с беп2(Т о) : Ьаяе (о) ( О ) с1аяя бепятегоещо ( ясастс чотб ма1п() ( беп2<яогтпс> с2 = пен беп2<ягттпс>("Привет" ); Сопяо1е .Игтоеътпе (62 .беСОЬ () ): ) ) Глава 18. Обобщения 621 В этой иерархии класс Сеп2 наследует от обобщенного класса Сеп. Обратите внимание на объявление класса Сеп2 в следующей строке кода.

с1яяя Сеп2<Т> : Сеп<Т> ( Параметр типа т указывается в объявлении класса Сеп2 и в то же время передается классу Сеп. Это означает, что любой тип, передаваемый классу Сеп2, будет передаваться также классу Сеп. Например, в следующем объявлении: сеп2<ясггпч> П2 = пен сеп2<ясггпп>("привет"); параметр типа ясгбпо передается классу Сеп. Поэтому переменная оЬ в той части класса Сеп2, которая относится к классу Сел, будет иметь тип я С гбпд. Обратите также внимание на то, что в классе Сеп2 параметр типа Т не используется, а только передается вверх по иерархии базовому классу Сеп. Это означает, что в производном классе следует непременно указывать параметры типа, требующиеся его обобщенному базовому классу, даже если этот производный класс не обязательно должен быть обобщенным.

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

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

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

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6374
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее