books-read.com
books-read.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Наш ресурс дает возможность бесплатно читать книгу онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных . Сайт books-read.com дает возможность читать полную версию книги без регистрации и sms. Все книги онлайн, не надо качать fb2, epub, txt.
Добавить книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю в приложение ЧИТАТЬ КНИГУ ОФЛАЙН в приложении ios/android
Перейти на страницу:

  } // end of method Car::add_AboutToBlow

Как и можно было ожидать, метод

remove_AboutToBlow()
будет вызывать
Delegate.Remove()
:

public hidebysig specialname instance void  remove_AboutToBlow (

  class [System.Runtime]System.EventHandler`1

    <class CarEvents.CarEventArgs> 'value') cil

  managed

  {

    ...

    IL_000b:  call class [System.Runtime]System.Delegate

                         [System.Runtime]System.

         Delegate::Remove(class [System.Runtime]System.Delegate,

                          class [System.Runtime]System.
Delegate)

    ...

}

Наконец, в коде CIL, представляющем само событие, используются директивы

.addon
и
.removeon
для отображения на имена корректных методов
add_XXX()
и
remove_XXX()
, подлежащих вызову:

.event class [System.Runtime]System.EventHandler`1

      <class CarEvents.CarEventArgs> AboutToBlow

{

  .addon instance void CarEvents.Car::add_AboutToBlow(

    class [System.Runtime]System.EventHandler`1

   <class CarEvents.CarEventArgs>)

  .removeon instance void CarEvents.Car::remove_AboutToBlow(

    class [System.Runtime]System.EventHandler`1

   <class CarEvents.CarEventArgs>)

} // end of event Car::AboutToBlow

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

Прослушивание входящих событий

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

+=
и
-=
напрямую (что приводит к внутренним вызовам методов
add_XXX()
или
remove_XXX()
). При регистрации события руководствуйтесь показанным ниже шаблоном:

// ИмяОбъекта.ИмяСобытия +=

// new СвязанныйДелегат(функцияДляВызова);

Car.CarEngineHandler d =

  new Car.CarEngineHandler(CarExplodedEventHandler);

myCar.Exploded += d;

Отключить от источника событий можно с помощью операции

-=
в соответствии со следующим шаблоном:

// ИмяОбъекта.ИмяСобытия - =

// СвязанныйДелегат(функцияДляВызова);

myCar.Exploded -= d;

Кроме того, с событиями можно использовать синтаксис группового преобразования методов:

Car.CarEngineHandler d = CarExplodedEventHandler;

myCar.Exploded += d;

При наличии таких весьма предсказуемых шаблонов переделайте вызывающий код, применив на этот раз синтаксис регистрации событий С#:

Console.WriteLine("***** Fun with Events *****n");

Car c1 = new Car("SlugBug", 100, 10);

// Зарегистрировать обработчики событий.

c1.AboutToBlow += CarIsAlmostDoomed;

c1.AboutToBlow += CarAboutToBlow;

Car.CarEngineHandler d = CarExploded;

c1.Exploded += d;

Console.WriteLine("***** Speeding up *****");

for (int i = 0; i < 6; i++)

{

  c1.Accelerate(20);

}

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

c1.Exploded -= d;

Console.WriteLine("n***** Speeding up *****");

for (int i = 0; i < 6; i++)

{

  c1.Accelerate(20);

}

Console.ReadLine();

static void CarAboutToBlow(string msg)

{

  Console.WriteLine(msg);

}

static void CarIsAlmostDoomed(string msg)

{

  Console.WriteLine("=> Critical Message from Car: {0}", msg);

}

static void CarExploded(string msg)

{

  Console.WriteLine(msg);

}

Упрощение регистрации событий с использованием Visual Studio

Среда Visual Studio предлагает помощь в процессе регистрации обработчиков событий. В случае применения синтаксиса

+=
при регистрации событий открывается окно IntelliSense, приглашающее нажать клавишу <ТаЬ> для автоматического завершения связанного экземпляра делегата (рис. 12.1), что достигается с использованием синтаксиса групповых преобразований методов.

Перейти на страницу:

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - на сайте онлайн книг books-read.com Вы можете читать полные версии книг автора в одном месте.


Язык программирования C#9 и платформа .NET5 отзывы

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор books-read.com


Прокомментировать
Подтвердите что вы не робот:*