Опубликован: 19.08.2004 | Уровень: для всех | Доступ: свободно | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Самостоятельная работа 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();
}
}