Основы программирования на C#


Классы с большим числом событий - часть 2


В нашем классе созданы четыре события и хэш-таблица DStore для их хранения. Все события принадлежат встроенному классу EventHandler. Когда к событию будет присоединяться обработчик, автоматически будет вызван метод add, который динамически создаст элемент хэш-таблиц. Ключом элемента является, в данном случае, строка с именем события. При отсоединении обработчика будет исполняться метод remove, выполняющий аналогичную операцию над соответствующим элементом хэш-таблицы. В классе определен также метод SimulateEvs, при вызове которого зажигаются два из четырех событий - Ev1 и Ev3.

Рассмотрим теперь класс ReceiverEvs, слушающий события. Этот класс построен по описанным ранее правилам. В нем есть ссылка на класс, создающий события; конструктор с параметром, которому передается реальный объект такого класса; четыре обработчика события - по одному на каждое, и метод OnConnect, связывающий обработчиков с событиями. Вот код класса:

class ReceiverEvs { private ManyEvents manyEvs; public ReceiverEvs( ManyEvents manyEvs) { this.manyEvs = manyEvs; OnConnect(); } public void OnConnect() { manyEvs.Ev1 += new EventHandler(H1); manyEvs.Ev2 += new EventHandler(H2); manyEvs.Ev3 += new EventHandler(H3); manyEvs.Ev4 += new EventHandler(H4); } public void H1(object s, EventArgs e) { Console.WriteLine("Событие Ev1"); } public void H2(object s, EventArgs e) { Console.WriteLine("Событие Ev2"); } public void H3(object s, EventArgs e) { Console.WriteLine("Событие Ev3"); } public void H4(object s, EventArgs e) { Console.WriteLine("Событие Ev4"); } }//class ReceiverEvs

Тестирующая процедура состоит из нескольких строчек, в которых создаются нужные объекты и запускается метод Simulate, зажигающий события:

public void TestManyEvents() { ManyEvents me = new ManyEvents(); ReceiverEvs revs = new ReceiverEvs(me); me.SimulateEvs(); }

Все работает предусмотренным образом.




Начало  Назад  Вперед