Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Прием поступающих событий

Прием поступающих событий

Использование событий в C# позволяет также упростить регистрацию обработчиков событий вызывающей стороны. Вместо необходимости указывать пользовательские вспомогательные методы, вызывающая сторона просто использует операции += и -= (которые в фоновом режиме "подключают" add_XXX() или remove_XXX()). Если вы хотите регистрировать событие, то следуйте показанному ниже шаблону.

// ОбъектнаяПеременная.ИмяСобытия +=
// new СоответствующийДелегат(вызываемаяФункция);
Car.EngineHandler d = new Car.EngineHandler(CarExplodedEventHandler) myCar.Exploded += d;

Чтобы отменить привязку к источнику событий, используйте операцию -=.

// ОбъектнаяПеременная.ИмяСобытия -= объектДелегата;
myCar.Exploded -= d;

С учетом этих соответствующих ожиданиям шаблонов, вот как должен выглядеть модифицированный метод Main(), в котором используется синтаксис регистрации событий C#.

class Program {
 statiс vоid Main(string[] args) {
  Console.WriteLine("***** События *****");
  Car c1 = new Car("SlugBug", 100, 10);
  // Регистрация обработчиков событий.
  сl.AboutToBlow += new Car.CarEventHandler(CarIsAlmostDoomed);
  cl.AboutToBlow += new Car.CarEventHandler(CarAbautToBlow);
  Car.CarEventHandler d = new Car.CarEventHandler(CarExploded);
  cl.Exploded += d;
  Console.WriteLine("n***** Ускорение *****);
  for(int i = 0; i ‹ 6; i++) cl.Accelerate(20);
  // Удаление метода CarExploded из списка вызовов.
  cl.Exploded -= d;
  Console.WriteLine("n***** Ускорение *****");
  for(int i = 0; i ‹ 6; i++) cl.Accelerate(20);
  Console.ReadLine();
 }
 public static void CarAboutToBlow(string msg) { Console.WriteLine(msg); }
 public static void CarIsAlmostDoomed(string msg) { Console.WriteLine("Critical Message from Car: {0}", msg); }
 public static void CarExploded(string msg) { Console.WriteLine(msg); }
}

Исходный код. Проект CarEvents размещен в подкаталоге, соответствующем главе 8.

Оглавление книги


Генерация: 1.851. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз