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

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

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

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

бе1епаае чо1С МуЕчепкиапб1ег()т // Объявить класс, содержащий событие. с1авв Мукчепе ( рпЫ1с ечепп Мукчеппвапс(1ег ЯоиеЕчепет // Этот метод вызывается для запуска события. риЫас ноас Опзоиекчепе() ( 11(зоиеЕчепп )= пп11) Яоиекнепк()) ) ) с1авв Х ( апк 1бт рпы1с х(1пс х) ( )б = хт // Этот метод экземпляра предназначен в качестве // обработчика событий. рпЫас чо1б Хьапб1ег() ( Сопво1е.ыг1пекапе("Событие получено объектом " + ьб) ) с1авв ЕчепеоеиоЗ ( впапас чо1б Маьп() Мукчепе ече = пем МуБчепе()т Х о1 = пен Х(1)т Х о2 = пен Х(2)т Х оЗ = пен Х(3)т ечк.зоиекчепе += о1.ХЬапб1егт енш ЯоиеЕчепк ь= о2.ХПапб1егт ечс.яотеенепс += оЗ.хпапб1егт // Запустить событие. ечк.опзовеЕт еде() т ) ) Выполиеиие кода из этого примера приводит к следуюшему результату: Событие получено объектом 1 Событие получено объектом 2 Событие получено объектом 3 Как следует из результата выполнения кода из приведенного выше примера, каждый объект должен зарегистрировать свой интерес в событии отдельно, и тогда ои будет получать отдельное уведомление о событии.

С другой стороны, когда в качестве обработчика событий используется статический метод, события обрабатываются независимо от какого-либо объекта, как демонстрируется в приведенном ниже примере программы. /* Уведомления о событии получает класс, котла статический метод используется в качестве Глава 15. Делегаты, события и ллыбда-выражении 483 обработчика событий. */ пя1пд Яуяоевт // Объявить тип делегата для события. бе1едаое чоуб МуЕчепопап61ег () т // Объявить класс, садеркаыий событие.

с1аяя Мукчепя ( рпП11с ечепо Мукчептпапб1ег яоыеЕчепяг // Этот метод вызывается для запуска события. рпо11с чо1б Опзоиекчепя() ( ЬЕ(5оыеЕчепо )= пп11) ЯоыеЕчепя () т с1аяя х ( /* Этот статический метод предназначен в качестве обработчика событий. */ рип11с яеаС1с чо1б Хвапб1ег() ( Сопяо1е.нгаееЬ1пе("Событие получено классом."); с1аяя Ечептпеыое ( яеаоас чоьб Маап() ( МуЕчепя ечя = пен МуЕчепя () т ечс.зоиеечепс += х.хпапб1егг // Запустить событие. ечо.опзоыеЕчепя()т ) ) При выполнение кода этого примера получается следующий результат: Событие получено классом.

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

Поэтому управление этим списком не нужно было организовывать вручную. Благодаря именно этому свойству такие события используются чаще всего. Тем не менее организовать управление списком вызовов обработчиков событий можно и вручную, чтобы, например, реализовать специальный механизм сохранения событий. 484 Часть ). Язык С№ Для управления списком обработчиков событий служит расширенная форма оператора ечепс, позволяющая использовать аксессоры событий.

Эти аксессоры предоставляют средства для управления реализацией подобного списка в приведенной ниже форме. ечепк делегат события иия события ( абб ( О Код добавления события в цепочку событий. ) гевоче ( О Код удаления события из цепочки событий.

) ) В эту форму входят два аксессора событий: ак(к[ и гевоче. Аксессор абб вызывается, когда обработчик событий добавляется в цепочку событий с помощью оператора +ьч В то же время аксессор гевоче вызывается, когда обработчик событий удаляется из цепочки событий с помощью оператора -=. Когда вызывается аксессор абб или гевоче, ои принимает в качестве параметра добавляемый или удаляемый обработчик. Как и в других разновидностях аксессоров, этот неявный параметр называется ча1це.

Реализовав аксессоры абб или гевоче, можно организовать специальную схему хранения обработчиков событий. Например, обработчики событий можно хранить в массиве, стеке или очереди. Ниже приведен пример программы, демонстрирующей аксессориую форму события. В ней для хранения обработчиков событий используется массив.

Этот массив состоит всего из трех элементов, поэтому в цепочке событий можно хранить одновременно только три обработчика. // Создать специальные средства для управления списками вызова обработчиков // событий. цзьпд зузкевк О Объявить тип делегата для события. бе1едаке чо№б Мукчепкиапб1ег()к // Объявить класс для хранения максимум трех событий. с1азз МуБчепк ( МувчепСНапб1ег[] ечпк = пеи МукчепСНапб1ег[3]к рциттс ечепк МувчепСНапб1ег эовевчепк ( // Добавить событие в список.

або ( 1пс (.) Гоп (1=0; 1 < 3) 1+ь) к № (ечпк [1! == пц11) ( ечпк[1] = ча1це; ьгеагы 1Г (1 == 3) Сопзо1е.иг1кеькпе("Список событий заполнен.") ) // Удалить событие из списка. гевоче ( Глава (5. Делегаты, события и ляыбда-выражения 485 ьпс ).) лог (я=от 1 < Зт 1ьъ) 1Е(ечпс[1! == ча1це) ( ечпг[1! = пц11т Ьгеаит ) ьа (1 == 3) Сопяо1е.Игасе1гпе("Обработчик событий не найден.") ) // Этот метод вызывается для запуска событий. рцЬ11с чо10 ОпЯоюеачепс() ( Еог(ьпс я=от г < 3; Еьь) 11(ечпс((.! )= пц11) ечпс[г! (); // Создать ряд классов, используюших // делегат муЕчепгнапб1ег. с1авв И ( рцЫгс чо10 Ипапб1ег() ( Сопзо1е.ыг1се11пе("Событие получено объектом И") ) с1аяя Х ( рцЬ11с чо10 ХЬапб1ег() ( Сопво1е.Иггсетупе("Событие получено объектом Х")т ! ) с1аяя У ( рцЫгс чо10 УЬапб1ег() ( Сопяо1е.ыггсеыапе("Событие получено объектом У")," ) с1авя Е ( рцЫ1с чо1г3 ЕЬапй1ег () ( Сопяо1е.ыг1се11пе("Событие получено объектом Е")Г ) с1аяв Ечепгреюо5 ( ясаг1с чо10 Магп() ( МуЕчепг ечс = пен МуЕчепс() И чОЬ = печ ИМ т Х хОЬ = печ Х() ) У уОЬ = печ Х() т Е яОЬ = пен Е() т // добавить обработчики в цепочку событий.

Сопяо1е.ыг1се11пе(")(повеление событий.")т 486 Часть ). язык Сз ечс.зовеечепс += чоб.иьапб1ет; ечС.БовеЕчепС += хОЬ.ХЬапб1ег; ечС.БовеЕчепС += УОЬ.УЬапб1ес; // Сохранить нельзя — список заполнен. ечС.БовеЕчепС += хОЬ.БЬапб1ест Сопао1е.нсскесзпе()) // ЗапУстить события. ечк.опзовеЕчепС()т Сопво1е.нкзкесзпе()т // Удалить обработчик. сопзо1е.иг1сееспе("удаление обработчика хоь.хьап61ет.") ечС.БовеБчепС =- хОЬ.ХЬапб1ег; ечк.опзовеЕчепС()) Сопзо1е.нсткес1пе()т // Попробовать удалить обработчик еще раз.

Сопво1е.игзсесзпе("Попытка удалить обработчик " Ь "хОЬ.ХЬапб1ес еще раз.")т ечС.БовеЕчепС =- хОЬ.ХЬапб1ест ечС.ОпзовеЕчепС()т Сопзо1е.ис1сеезпе()т // А теперь добавить обработчик 2Ьапб1ес. Сопао1е.ис1сесьпе("Добавление обработчика кОЬ.2Ьапб1ес.")) ечС.БовеЕчепС а= тОЬ.2папб1етт ечС.ОпзовеБчепС()) ) Ниже приведен результат выполнения атой программы: Добавление событий. Список событий заполнен. Событие получено объектом И Событие получено объектом Х Событие получено объектом Х Удаление обработчика хОЬ.ХЬапб1ес. Событие получено объектом И Событие получено объектом т Попытка удалить обработчик хОЬ.ХЬапб1ес еще раз. Обработчик событий не найден.

Событие получено объектом И Событие получено объектом т Добавление обработчика хОЬ.ЕЬапб1ет. Событие получено объектом И Глава 15. Делегаты, события и лямбдв.выражения 4о7 Событие получено объектом Х Событие получено обьектом т Рассмотрим данную программу более подробно. Сначала в ией определяется делегат обработчиков событий мудчепс)(апс(1ег. Затем объявляется класс мудчепс. В самом его начале определяется массив обработчиков событий ечпг, состоящий из трех элементов: ИУЕчепспапб1ег() ечпг = пен ИуЕчепгпапб1ег(3); Этот массив служит для хранения обработчиков событий, добавляемых в цепочку событий. По умолчанию злемеиты массива ечпс инициализируются пустым значением (пп11).

Далее объявляется событие еоспеечепс. В этом объявлении используется приведениая ниже аксессориая форма оператора ечепг. рчб11с ечепс ИуЕчепсиапб1ег Боиеечепс ( // добавить событие в список. абб ( 1пс 1т Гог(я=от г < Зт 1++) 11(ечпг(1] == пч11) ( ечпс(1) = ча1ие; Ьгеа)с; ) 11 (1 == 3) Сопзо1е.мг1гетапе("Список событий заполнен."); // Удалить событие из списка. геиоче ( Епс гт Гог(я=от 1 < 3) 1++) гг(ечпс(1) == ча1ие) ( ечпг(1] = пп11) Ьгеахт ) 11 (1 == 3) Сопяо1е.ыг1геььпе("Обработчик событий не найден."); ) Когда в цепочку событий добавляется обработчик событий, вызывается аксессор ас(с( и в первом неиспользуемом (т.е.

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

Если ссылка найдена, то соответствующему элемеиту массива присваивается пустое значение (пп11), а значит, обработчик удаляется из цепочки событий. При запуске события вызывается метод Опеоыеечепг () . В этом методе происходит циклическое обращение к элементам массива ечпг для вызова по очереди каждого обработчика событий.

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

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