Главная » Просмотр файлов » Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)

Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 76

Файл №1160865 Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)) 76 страницаНэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865) страница 762019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

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

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

В точке вызова делегата синтаксис идентичен и не зависит от того, указывает делегат на метод экземпляра или на статический метод. Конечно, этот пример довольно надуманный, но он дает представление об основах применения делегатов в С(). Во всех случаях предыдущего кода при вызове делегата происходит единственное действие. Но делегаты можно связывать в цепочки, выполшпощие по нескольку действий сразу, и этому посвящен следующий раздел. Цепочки делегатов Цепочка делегатов позволяет создавать связный список делегатов, так что когда вызывается делегат, находящийся в начале списка, вслед за ним выполшпотся все делегаты цепочки. Класс Буз ген. Ре1едаге предоставляет несколъко статических методов для управления списком делегатов. При создании списков делегатов применяются следующие методы, объявленные в типе Буз Ьеа.

Ре1едасе: рпЬ11с с1азз Рэ1едаге: 1С1опеаЬ)е, 1Бегга11гаь)е ( рпь)гс зсаггс Ре1едасе соаьгпе( Ре1едасе[) ); риь11с згаг1с Ре1едаге ссаь)пе( Ре1едасе гггэс, Ре1едаге зесопс ); Обратитевнимание,что методы СопЬ1пе принимают делегаты для связи в цепочку и возвращают другой Ре1едзве. Возвращенный Ре1едзСе представляет собой новый экземпляр Мп1сасазсРе1едаге, унаследованный от Ре1едасе,потому что экземпляры Ре1едзге являютсянеизменяемыми. Как видите, первая версия Соп|Ь1пе,приведенная выше. принимает массив делегатов,чтобы сформироватьнепрерывную цепочну делегатов.а вторая форма принимает Делегаты, анонимные функции и события 287 только пару делегатов. Однако в обоих случаях любой из экземпляров делегата, переданного в параметрах, может сам быть началом цепочки делегатов.

Так что подобным образом можно получать весьма сложные вложенные структуры. Для удаления делегата из списка служат следующие статические методы Яуягелг. пе1едасе: риЬ11с с1авв ое1есзге: 1С1опяЬ1е, 18егтя11хяЫе ( риЫьс всзгбс ое1еоасе Кеасче ( ое1еивке всигсе, ое1еовсе чя1ие ) 7 риЬ11с вгвгбс ое1еоясе Неасчей11( ое1есаге всигсе, ое1еиясе чя1ие ) т ) Как и в случае методов СоиЬбпе, методы Кеноче и Кеночей11 возвращают новый экземпляр пе1еоаге, созданный из двух предшествующих.

Метод Кеаоче удаляет последнее вхождение списка вызовов, представленного параметром ча1ие. из исходного списка делегатов, в то время как Кеиочей11 удаляет все вхождения списка вызовов, представленного параметром ча1ие, из исходного списка делегатов. Обратите внимание, что параметр га1ие может представлять список делегатов вместо одиночного делегата. Эти методы позволяют осуществлять очень сложные сценарии управления списками делегатов. Если предыдущие методы покажутся запутанными, на этот случай в СЗ предусмотрены операции для комбинирования и удаления делегатов из цепочки. Чтобы скомбинировать два делегата или списка делегатов, используйте операцию сложения.

а чтобы удалить делегат или список делегатов из цепочки — операцию вычитания. Взглянем на модифицированную форму примера кода из предыдущего раздела, которая демонстрирует комбинирование делегатов: ивана аувгело риЫтс бе1едяге боиЬ1е Ргосеяяневи1ся ( боиЬ1е х, боиЬ1е у ); риЬ11с с1явя Ргосеввог ( риЬ11с Ргосеввсг( бсиЫе гвсссг ) ( Сьья.гассет = гясгогт ) риЬ11с бсиЫе Соарисе( боиЫе х, бсиЫе у ) ( боиЬ1е геви1Г = (хну) *гасгог) сопвс1е.хгьсеьупе( "1пвсвпсекеви1св: (О)", геви1г ) г гвгигп гЕяи1гт ) РиЬ11с вгзгтс боиЬ1е якягтсСоыригв( боиЬ1е х, боиЬ1е у ) ( боиЬ1е геви11 (хеу)*0.5; Сспво1е.нггсеььпе( "агвс1скеви1Г: (О]", геви1С ); гесигп геви1гч ) ргтчяке боиЬ1е гвсгсгг ) риЬ11с с1явв ЕпггуРогпс ( всягьс чсьб Мягп() ( Ргосевяаг ргсс1 = пен Ргссевяог( 0.75 ); Ргосевяог ргсс2 = пен Ргосеявог( 0.83 ); Ргосевякеви1гя(] бе1всагев = пен Ргосеявневи1гя(] ( ргсс1.Сотрисе, ргос2.Созрисе, Ргссеяяог.ЯГястсСсарисе 288 Глава 10 // Саязаеь делегаеи в палочку.

Ргосеаакезп1сз скаапеб е бе1есасез[0) + бе1есасез[1) + бе1есасез[2); бооЬ1е сопЬ[пеб = сьа[пеб( 4, 5 ); Сопво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св Делегаты, анонимные функции и событие 289 риЬ11с ятатгс бооЬ1е Бтат1ссоарпте( бопЬ1е х, бооЬ1е у ) бопЬ1е теяс1Г = (х+у)*0.5г Сопяо1е.ыггтет Еде( "Ясасгскеяп1Г: (0)", геяо1Ь )г гетптп теяп1гг ) рт1яаге бопЬ1е Гасгогг ) рсЬ1гс с1аяя ЕптгуРогпт ягат1с яо1б Маго() Ртосеяяог ргос1 = пен Ртосеяяот( 0.75 )г Ртосеяяог ргос2 = пен Ртосеяяот( 0.83 )г Ргосеяянеяо1тя(] бе1едатея = пен Ргосеяякеяо11я(] ( ргос1.Соврите, ргос2.Сопрпте, Ртосеяяог.ятат1ссотрпге )г Ртосеяяаеяп1тя спа1пеб = бе1едагея(0] бе1едатея [1] бе1едагея (2] г Ре1едаге(] сЬагп = сьа1пеб.деЬХптгосатгоп11ят()г бопЬ1е асспао1агот = От Рот( 1пс г = Ог 1 < сьа1п.ьепдспг а+г ) ( Ргосеяянеяп1тя соггепк = (Ргосеяянеяп1тя) снатп(1); ассогао1атот а= соггепт( 4, 5 ) Сопяо1е.иг1се51пе( "Вывод: (О)", асспво1асог )г Несвязанные делегаты [делегаты открытого экземпляра) Во всех приведенных до сих пор примерах делегатов было показано, как привязывать делегат к статическому методу определенного типа нли к методу определенного экземпляра.

Эта абстракция предоставляет замечательное средство разделения кода, но делегат в действительности не имитирует и не представляет указателя на метод, поскольку привязывается к методу на определенном экземпляре. Что, если необходимо, чтобы делегат представлял метод экземпляра, но вызывать этот метод через делегат на целой коллекции экземпляров? Для решения этой задачи понадобится делегата огпкрыгпого экземпляра (ореп гпя(апсе бе]еяаге).

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

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

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

Нэш Трей - C# 2010
Accelerated_C_2010-4565
3_syntax_overview
3_generics_1.cs
as_1.cs
boxing.cs
conversions_1.cs
implicit_type_1.cs
is_1.cs
references_1.cs
references_2.cs
references_3.cs
values_1.cs
4_classes_structs
4_abstract_classes_1.cs
4_beforefieldinit_1.cs
4_box_1.cs
4_box_2.cs
4_box_3.cs
4_box_4.cs
4_box_5.cs
4_class_definition_1.cs
4_compareto_1.cs
4_containment_example_1.cs
4_containment_example_2.cs
4_containment_example_3.cs
4_ctor_struct_1.cs
4_ctor_struct_2.cs
4_ctor_struct_3.cs
4_destructor_1.cs
4_destructor_2.cs
Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7054
Авторов
на СтудИзбе
259
Средний доход
с одного платного файла
Обучение Подробнее