Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю Страница 244
- Категория: Компьютеры и Интернет / Базы данных
- Автор: Троелсен Эндрю
- Страниц: 642
- Добавлено: 2023-08-26 14:00:22
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту pbn.book@yandex.ru для удаления материала
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю краткое содержание
Прочтите описание перед тем, как прочитать онлайн книгу «Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю» бесплатно полную версию:В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле.
Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных.
Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю читать онлайн бесплатно
} // 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;
Отключить от источника событий можно с помощью операции -= в соответствии со следующим шаблоном:
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})// ИмяОбъекта.ИмяСобытия - =
// СвязанныйДелегат(функцияДляВызова);
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), что достигается с использованием синтаксиса групповых преобразований методов.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.