logo search
[ТП]Lektsii / Лекции по С#

Классы receiver. Как обрабатываются события

Объекты класса Sender создают события и уведомляют о них объекты, возможно, разных классов, названных нами классами Receiver, или клиентами. Давайте разберемся, как должны быть устроены классы Receiver, чтобы вся эта схема заработала.

Понятно, что класс receiver должен:

  1. • иметь обработчик события - процедуру, согласованную по сигнатуре с функциональным типом делегата, который задает событие;

  2. • иметь ссылку на объект, создающий событие, чтобы получить доступ к этому событию - event-объекту;

  3. • уметь присоединить обработчик события к event-объекту. Это можно реализовать по-разному, но технологично это делать непосредственно в конструкторе класса, так что когда создается объект, получающий сообщение, он изначально готов принимать и обрабатывать сообщения о событиях. Вот пример, демонстрирующий возможное решение проблем:

public class FireMen

{

private TownWithEvents MyNativeTown;

public FireMen(TownWithEvents TWE)

{

this.MyNativeTown=TWE;

MyNativeTown.FireEvent += new

FireEventHandler(FireHandler);

}

private void FireHandler(object Sender, int time, int build)

{

Console.WriteLine("Fire at day {0}, in build {1}!",

time, build);

}

public void GoOut()

{

MyNativeTown.FireEvent -= new FireEventHandler(FireHandler);

}

}//FireMan

В классе Fireman есть ссылка на объект класса TownWithEvents, создающий события. Сам объект передается в конструкторе класса. Здесь же происходит присоединение обработчика события к event-объекту. Обработчик события FireHandler выводит сообщение на консоль.