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

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

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

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

В приведенной ниже программе объявляется необобщенный класс лггаупс11я, а в нем — статический обобщенный метод Сору1пяегС () . Этот метод копирует содержимое одного массива в другой, вводя по ходу дела новый элемент в указанном месте. Метод Сору1пяегС () можно использовать вместе с массивами любого типа. О Продемонстрировать применение обобщенного метода. ияьпе Буяпев; О Класс обработки массивов. Этот класс не является обобвенным.

с1аяя ЛхгауПС11я ( О Копировать массив, вводя по ходу дела новый элемент. // Этот метод является обобвенным. рцЬ11с ягаС1с Ьсо1 Сору1пяегС<Т>(Т е, цьпС ьбх, т(] ягс, т[] сагсес) ( // Проверить, насколько велик массив. 11(сагеес.ьепдсь < ягс.ьепдсь+1) сепцгп Та1яег О Скопировать содержимое массива ягс я целевой массив, // попутно введя значение е по индексу Ьбх. тот(ьпс 1=0, 2=0; 1 < ягс /ьепчсьг 1м, ]т+) ( те(1 == 1бх) ( сасдес(]] = е; ] Н-," ) сагдес(]] = ясс(1); ) сесцгп ссце; с1аяя Сепнегпоево ( ясас1с чо1б Мазе() ( ьпС(] пцвя = ( 1, 2, 3 1пс(] пцвя2 = пек 1пс(4]г // Вывести содержимое массияа пцвя.

Сспяо1е.нс1Се("Содержимое массива пыля: ")) Тсгеасп(ьпп х Тп пцвя) 608 Часть!. Язык С() Сопяо1е.игтсе(х + " "); Сопяо1е.иг1гепгпе(); // Обработать массив типа ьпг. Аггауосг1я.Сору1пвегс(99, 2, пшпя, пшяя2); // Вывести содержимое массива пшпя2. Сопяо1е.иг1се("Содержимое массива ппщя2: ") Гогеась(ьпс х 1п пшпя2) Сопяо1е.иг1се(х + " "); Сопяо1е.иг1сеЬ1пе() // А теперь обработать массив строк, используя метод соругпяегс.

ясгьп9() ясгя = ("Обобщения", "весьма", "эффективны."); ягг1п9[) Ясгя2 = пен ясгьп9[4)г // Вывести содержимое массива яягя. Сопяо1е.иггве("Содержимое массива ясгя: ")~ Йогеась(ягггпо з 1п ясгз) Сопяо1е.иг1ге(я + " "); Сопяо1е.ХгьсеЬьпе () // Ввести элемент в массив строк.

Аггаубг11я.сору1пяегг("в сз", 1, яств, яггя2) Вывести содержимое массива ясгя2. Сопяо1е.Хггсе("Содержимое массива ясгя2: ")г Гогеась(ясггпд я 1п ясгя2) Сопяо1е .Хгьсе (я + " "); Сопяо1е.иг1сеЬ1пе()/ // Этот вызов недопустим, поскольку первый аргумент // относится к типу бооЬ1е, а третий и четвертый // аргументы обозначают элементы массивов типа гпг. // АггауОГ11я.сору1пяегг(0.01, 2, пшпя, пшпя2); ) ) Вот к какому результату приводит выполнение этой программы.

Содержимое массива пшпя: 1 2 3 Содержимое массива пшпя2: 1 2 99 3 Содержимое массива ясгя: Обобщения весьма эффективны. Содержимое массива ясгя2: Обобщения в С() весьма эффективны. Внимательно проанализируем метод сору1пяегь () . Прежде всего обратите внимание на объявление этого метода в следующей строке кода. рсЬ11с ягас1с Ьоо1 Сорутпяегс<т>(Т е, оьпс 1бх, Т() ягс, Т[) Гагдег) ( Глава 18.

Обобщения 609 Параметр типа объявляется восле имени метода, но перед списком его параметров. Обратите также внимание на то, что метод сору1пвегс () является статическим, что позволяет вызывать его независимо от любого объекта. Следует, однако, иметь в виду, что обобщенные методы могут быть либо статическими, либо нестатическими. В этом отношении для них не существуег никаких ограничений. Далее обратите внимание на то, что метод Сору1пвегг () вызывается в методе иа10 () с помощью обычного синтаксиса и без указания аргументов типа.

Дело в том, что типы аргументов различаются автоматически, а тип Т соответственно подстраивается. Этот процесс называется выводимосгвью тинов. Например, в первом вызове данного метода Лггвуос11в.соругввегс(99, 2, пива, пяпв2) г тип Т становится типом Тпг, поскольку числовое значение 99 и элементы массивов ппюв и ппвэ2 относятся к типу Тпг. А во втором вызове данного метода используются строковые типы, и поэтому тип Т заменяется типом вгг109. А теперь обратите внимание на приведенную ниже закомментированную строку кода.

// Лггвуогх1в.сору1пвегг (О. 01, 2, пввв, пипв2); Если удалить символы комментария в начале этой строки кода и затем попытаться перекомпилировать программу, то будет получено сообщение об ошибке. Дело в том, что первый аргумент в данном вызове метода Сору1пвегс () относится к типу <(оп)>1е, а третий и четвертый аргументы обозначают элементы массивов пппз и пшяв2 типа Тпс. Но все эти аргументы типа должны заменить один и тот же параметр типа т, а это приведет к несоответствию типов и, как следствие, к ошибке во время компиляции.

Подобная возможность соблюдать типовую безопасность относится к одним из самых главных преимуществ обобщенных методов. Синтаксис объявления метода Сору1пвегс () может быть обобщен. Ниже приведена общая форма объявления обобщенного метода. всвврвщлемвй тип имв метода<список параметров типа>(список параметров) (// В любом случае список параметров типа обозначает разделяемый запятой список параметров типа. Обратите внимание на то, что в объявлении обобщенного метода список параметров типа следует после имени метода. Вызов обобщенного метода с явно указанными аргументами типа В большинстве случаев неявной выводимости типов оказывается достаточно для вызова обобщенного метода, тем не менее аргументы типа могут быть указаны явным образом.

Для этого достаточно указать аргументы типа после имени метода при его вызове. В качестве примера ниже приведена строка кода, в которой метод Сор у1 па егг ( ) вызывается с явно указываемым аргументом типа зсгъпд. Лггаупс11в.оору1ввегг<вгг1вч>("В С()", 1, всгв, вггв2) г Тип передаваемых аргументов необходимо указывать явно в том случае, если компилятор не сможет вывести тип параметра Т или если требуется отменить выводимосгь типов.

610 Часть (. язык С№ Применение ограничений В обобщенных методах На аргументы обобщенного метода можно наложить ограничения, указав их после списка параметров. В качестве примера ниже приведен вариант метода Сору1пяегг () для обработки данных только ссылочных типов. рпЬ11с ягаггс Ьоо1 сору1пяегг<т>(т е, выло 1дк, Т() ягс, Т(] гагчег) нЬеге Т: с1аяв ( Если попробовать применить этот вариант в предыдущем примере программы обработки массивов, то приведенный ниже вызов метода Оорутпзегг П не будет скомпилирован, поскольку Тпг является типом значения, а не ссылочным типом. // Теперь неправильно, поскольку параметр Т должен быть ссылочного типа! Аггаупг11я.сору1пяегг(99, 2, пощя, пощя2)г // Теперь недопустимо! Обобщенные делегаты Как и методы, делегаты также могут быть обобщенными.

Ниже приведена общая форма объявления обобщенного делегата. бе1ечаге возвращаемьм тип иия делегата<список параметров типа> (список аргументов) г Обратите внимание на расположение списка параметров типа. Он следует непосредственно после имени делегата. Преимущество обобщенных делегатов заключается в том, что их допускается определять в типизированной обобщенной форме, которую можно затем согласовав с любым совместимым методом. В приведенном ниже примере программы демонстрируется применение делегата Бощеор с одним параметром типа Т.

Этот делегат возвращает значение типа Т и принимает аргумент типа Т. // Простой пример обобщенного делегата. оя1пд Зуягещг // Объявить обобщенный делегат. г)е1ечаге Т Бощеор<Т>(Т ч)г с1аяя Оеппе1едагепещо ( // Возвратить результат суммирования аргумента. ягаггс 1пг Яшп(1пг ч) ( 1пг геяи1г = ОГ Гог (ьпг 1=ч; г>09 1 — ) геяо1г += 1) гегагп гево1гг // Возвратить строку, содержащую обратное значение аргумента.

ягаггс ягггпч Ве11есг(ягггпч ягг) ( ягггпч геяи1г = ""; Гогеасв(сдаг сЬ гп ягг) Глава 18. Обобщения 611 геяо1Г = сб + геяо1Г; гегогп геяо1г; ) ясас1о чогс( Нагл() ( ГЕ Сконструировать делегат типа Епс. Бопеор<гпс> 1псбе1 = Яоп; Сопяо1е.нггсеггпе(1пспе1(3)); // Сконструировать делегат типа ясггпд. Бопеор<ясг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по, поэтому он совместим со строковым экземпляром делегата БопеОр.

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

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

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

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