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

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

На нашем литературном портале можно бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю, Троелсен Эндрю . Жанр: Базы данных. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале litmir.org.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Название: Язык программирования C#9 и платформа .NET5
Дата добавления: 22 август 2024
Количество просмотров: 234
Читать онлайн

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту readbookfedya@gmail.com для удаления материала

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

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

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле.

Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных.

Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

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

hee, hee, hee...

Очевидно, что вы не захотите предоставлять другим приложениям возможность изменять то, на что указывает делегат, или вызывать его члены без вашего разрешения. С учетом сказанного общепринятая практика предусматривает объявление переменных-членов, имеющих типы делегатов, как закрытых.

Ключевое слово event

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

Определение события представляет собой двухэтапный процесс. Во-первых, понадобится определить тип делегата (или задействовать существующий тип), который будет хранить список методов, подлежащих вызову при возникновении события. Во-вторых, необходимо объявить событие (с применением ключевого слова event) в терминах связанного типа делегата.

Чтобы продемонстрировать использование ключевого слова event, создайте новый проект консольного приложения по имени CarEvents. В этой версии класса Car будут определены два события под названиями AboutToBlow и Exploded, которые ассоциированы с единственным типом делегата по имени CarEngineHandler. Ниже показаны начальные изменения, внесенные в класс Car:

using System;

namespace CarEvents

{

  public class Car

  {

    ...

    // Этот делегат работает в сочетании с событиями Car.

    public delegate void CarEngineHandler(string msgForCaller);

<b>    // Этот объект Car может отправлять следующие события:</b>

    public event CarEngineHandler Exploded;

    public event CarEngineHandler AboutToBlow;

    ...

  }

}

Отправка события вызывающему коду сводится просто к указанию события по имени наряду со всеми обязательными параметрами, как определено ассоциированным делегатом. Чтобы удостовериться в том, что вызывающий код действительно зарегистрировал событие, перед вызовом набора методов делегата событие следует проверить на равенство null. Ниже приведена новая версия метода Accelerate() класса Car:

public void Accelerate(int delta)

{

  // Если автомобиль сломан, то инициировать событие Exploded.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

  if (_carIsDead)

  {

    Exploded?.Invoke(&quot;Sorry, this car is dead...&quot;);

  }

   else

  {

    CurrentSpeed += delta;

<b>    // Почти сломан?</b>

    if (10 == MaxSpeed - CurrentSpeed)

    {

      AboutToBlow?.Invoke(&quot;Careful buddy! Gonna blow!&quot;);

    }

<b>    // Все еще в порядке!</b>

    if (CurrentSpeed &gt;= MaxSpeed)

    {

      _carIsDead = true;

    }

    else

    {

      Console.WriteLine(&quot;CurrentSpeed = {0}&quot;, CurrentSpeed);

    }

  }

}

Итак, класс Car был сконфигурирован для отправки двух специальных событий без необходимости в определении специальных функций регистрации или в объявлении переменных-членов, имеющих типы делегатов. Применение нового объекта вы увидите очень скоро, но сначала давайте чуть подробнее рассмотрим архитектуру событий.

"За кулисами" событий

Когда компилятор C# обрабатывает ключевое слово event, он генерирует два скрытых метода, один с префиксом add_, а другой с префиксом remove_. За префиксом следует имя события С#. Например, событие Exploded дает в результате два скрытых метода с именами add_Exploded() и remove_Exploded(). Если заглянуть в код CIL метода add_AboutToBlow(), то можно обнаружить вызов метода Delegate.Combine(). Взгляните на частичный код CIL:

.method public hidebysig specialname instance void  add_AboutToBlow(

  class [System.Runtime]System.EventHandler`1&lt;class CarEvents.

         CarEventArgs&gt; 'value') cil

  managed

  {

     ...

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

                         [System.Runtime]System.

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

                       class [System.Runtime]System.Delegate)

     ...

Перейти на страницу:
Комментариев (0)