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

We use cookies. Read the Privacy and Cookie Policy

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

Использование событий в 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(" ***** Ускорение *****);

  for(int i = 0; i ‹ 6; i++) cl.Accelerate(20);

  // Удаление метода CarExploded из списка вызовов.

  cl.Exploded -= d;

  Console.WriteLine(" ***** Ускорение *****");

  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.