Контроль над событиями
При разборе первого примера подраздела говорилось, что введение дополнительных функций позволяет контролировать работу с событием. Но как оказалось, события .NET полностью закрыты для программиста. Они скрывают всю грязную работу за кулисами и контролировать обращение к событиям не представляется возможным. Но это утверждение верно только при стандартном способе использования событий. Также существует дополнительный расширенный режим их использования, при котором программист может самостоятельно объявить функции, управляющие подключением и отключением делегатов-обработчиков. Для этого в языке C# предусмотрена специальная конструкция, с использованием двух дополнительных ключевых слов add и remove.
Единственное, что может смутить при рассмотрении кода, так это то, что add и remove, по сути дела, являются функциями, принимающими один параметр. Чтобы получить доступ к этому параметру, необходимо воспользоваться ключевым словом value. При использовании расширенного режима компилятор не будет автоматически описывать поле-делегат, и его придется вводить самостоятельно. Рассмотрим пример, демонстрирующий работу данного подхода (листинг 14). Этот пример по функциональности и внутренней архитектуре будет аналогичен предыдущему, только код поддержки работы с событием будет реализован в нем вручную. Листинг 14. Поддержка событий в ручном режиме.
В результате работы примера получим на консоли следующие строки.
Как видим, приложение действовало по заданной схеме, контролируя при этом добавление и изъятие делегатов. Такая возможность может быть весьма полезна для анализа и слежения за функциями, прикрепленными к событию. К примеру, можно запретить добавление событий кодом, не имеющим определенных привилегий защиты. Пример паттерна наблюдатель по полной форме.
II Задание Общее задание: При помощи механизма события по полной форме создать класс для данных(наследник EventArgs), Создать класс наблюдатель и создать класс-источник. При подписки(отписки) одного из наблюдателей выводить сообщения на консоль соответствующее специфики задачи. Варианты:
1. Создать класс аукцион(источник). В котором всем посетителям передается информация о лоте(класс данные: цена, название, год создание, автор), который выставлен и каждый подписчик может изменить его стоимость. И тут же должны быть освещены о том, что это произошло.
2. Создать класс метео центр(истоник). В котором всем метеостанциям каждая находится в своем округе передается информация о погоде(класс данные скорость ветра, температура, округ), Как только в каком-то округе данные меняются необходимо сообщить все остальные метеостанции. 3. Создать класс преподаватель(истоник). При помощи которого надо провести урок «Знакомьтесь это я» в котором все ученики рассказывают о себе(класс данных: имя, возраст, пол, хобби(массив стринг), домашний питомец). Ученики по очереди встают и рассказывают о себе преподавателю, а он передает эти данные всем ученикам) . 4. Создать класс чат-сервер(истоник). При помощи которого надо передавать сообщения пользователей (класс данных: сообщение, дата). Пользователи(наблюдателе) произвольно могут написать сообщение и оно передастся сразу всем(т.е. использовать сокеты или как-то ограничивать сообщения не надо) .
III. Контрольные вопросы Вопросы для контроля 1. Что такое событие? 2. Какую конструкцию оно заменяет? 3. Что значит событие в полной форме? 4. Классы, которые необходимы событиям в полной форме. 5. Принцип паттерна наблюдатель?
Литература 1. Полный справочник по С#. Г. Шилдт. Издательский дом «Вильямс», 2004. 2. С# в подлиннике. Наиболее полное руководство. Х.Дейтел. 3. C# в задачах и примерах. Культин. Н.Б. 4. С# учебный курс. Г.Шилдт. СПб.: Питер, 2002. 5. С# программирование на языке высокого уровня Павловская Т.А. СПб.: БХВ-Петербург.
Популярное: Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (343)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |