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


Классы receiver


Мы построим два класса, объекты которых способны получать и обрабатывать событие Changed. Получать они будут одно и то же сообщение, а обрабатывать его будут по-разному. В нашей модельной задаче различие обработчиков сведется к выдаче разных сообщений. Поэтому достаточно разобраться с устройством одного класса, названного EventReceiver1. Вот его код:

class EventReceiver1 { private ListWithChangedEvent List; public EventReceiver1(ListWithChangedEvent list) { List = list; // Присоединяет обработчик к событию. OnConnect(); } //Обработчик события - выдает сообщение. //Разрешает добавление элементов, меньших 10. private void ListChanged(object sender, ChangedEventArgs args) { Console.WriteLine("EventReceiver1: Сообщаю об изменениях:" + "Item ={0}", args.Item); args.Permit = ((int)args.Item < 10); } public void OnConnect() { //Присоединяет обработчик к событию List.Changed += new ChangedEventHandler(ListChanged); } public void OffConnect() { //Отсоединяет обработчик от события и удаляет список List.Changed -= new ChangedEventHandler(ListChanged); List = null; } }//class EventReceiver1

Дам краткие комментарии.

  • Среди закрытых свойств класса есть ссылка List на объект, создающий события.
  • Конструктору класса передается фактический объект, который и будет присоединен к List. В конструкторе же происходит присоединение обработчика события к событию. Для этого, как положено, используется созданный в классе метод OnConnect.
  • Класс содержит метод OffConnect, позволяющий при необходимости отключить обработчик от события.
  • Обработчик события, анализируя переданный ему входной аргумент события Item, разрешает или не разрешает изменение элемента, формируя значение выходного аргумента Permit. Параллельно обработчик выводит на консоль сообщение о своей работе.

Класс Receiver2 устроен аналогично. Приведу его текст уже без всяких комментариев:

class Receiver2 { private ListWithChangedEvent List; public Receiver2(ListWithChangedEvent list) { List = list; // Присоединяет обработчик к событию. OnConnect(); } // Обработчик события - выдает сообщение. //Разрешает добавление элементов, меньших 20. private void ListChanged(object sender, ChangedEventArgs args) { Console.WriteLine("Receiver2: Сообщаю об изменениях:" + " Объект класса {0} : " + "Item ={1}", sender.GetType(), args.Item); args.Permit = ((int)args.Item < 20); } public void OnConnect() { //Присоединяет обработчик к событию List.Changed += new ChangedEventHandler(ListChanged); //Заметьте, допустимо только присоединение (+=), //но не замена (=) //List.Changed = new ChangedEventHandler(ListChanged); } public void OffConnect() { //Отсоединяет обработчик от события и удаляет список List.Changed -= new ChangedEventHandler(ListChanged); List = null; } }//class Receiver2




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