Прием поступающих событий
Прием поступающих событий
Использование событий в 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.
Лето — время эзотерики и психологии! ☀️
Получи книгу в подарок из специальной подборки по эзотерике и психологии. И скидку 20% на все книги Литрес
ПОЛУЧИТЬ СКИДКУ