Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 19.08.2004 | Доступ: свободный | Студентов: 6058 / 402 | Оценка: 4.16 / 3.86 | Длительность: 10:50:00
Тема: Программирование
Специальности: Программист
Теги:
Самостоятельная работа 5:
Событийно-ориентированное программирование
Аннотация: Цель: ознакомление с особенностями реализации механизмов событийно-ориентированного программирования в языке C# (механизм обработки событий, исключительные ситуации).
Теоретические сведения
Обработка событий
Под событием будем понимать автоматическое извещение о каком-либо действии среды программирования или пользователя. События являются членами класса и объявляются с использованием ключевого слова event. Реализация механизма событий в языке программирования C# основана на использовании делегатов.
Описание события
Синтаксис:
event имя_делегата имя_обьекта;
Широковещательные события
Некоторые события могут активизировать несколько процедур обработки, в том числе определенных в других объектах. Такие события называются широковещательными. Реализация механизма широковещательных событий в языке программирования C# основана на использовании многоадресных делегатов.
Пример управления событиями посредством делегата:
// Объявление делегата, на основе которого // будет определено событие. delegate void MyEventHandler () ; // Объявление класса, в котором // инициируется событие. class MyEvent { public event MyEventHandler activate; // В этом методе инициируется событие. public void fire() { if (activate != null) activate(); } } class X { public void Xhandler() { Console.WriteLine("Событие получено объектом класса X."); } } class Y { public void Yhandler() { Console.WriteLine("Событие получено объектом класса Y."); } } class EventDemo { static void handler() { Console.WriteLine("Событие получено объектом класса EventDemo.") } public static void Main() { MyEvent evt = new MyEvent(); X xOb = new X(); Y yOb = new Y(); // Добавление методов handler (), XhandlerО // и YhandlerO в цепочку обработчиков события. evt.activate += new MyEventHandler(handler); evt.activate += new MyEventHandler(xOb.Xhandler); evt.activate += new MyEventHandler(yOb.Yhandler); evt.fire(); Console.WriteLine(); evt.activate -= new MyEventHandler(xOb.Xhandler); evt.fire(); } }