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

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

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

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

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

    1 ... 211 212 213 214 215 216 217 218 219 ... 407
    Перейти на страницу:
    версии класса Car с радиоприемником был определен следующий метод:

    public void TurnOnRadio(bool musicOn, MusicMediaEnum mm)

         => MessageBox.Show(musicOn ? $"Jamming {mm}" : "Quiet time...");

    Метод TurnOnRadio() принимает два параметра: булевское значение, которое указывает, должна ли быть включена музыкальная система в автомобиле, и перечисление, представляющее тип музыкального проигрывателя. Вспомните, что это перечисление определено так:

    public enum MusicMediaEnum

    {

      musicCd,    // 0

      musicTape,  // 1

      musicRadio, // 2

      musicMp3    // 3

    }

    Ниже приведен код нового метода класса Program, в котором вызывается TurnOnRadio(). Обратите внимание на использование внутренних числовых значений перечисления MusicMediaEnum:

    static void InvokeMethodWithArgsUsingLateBinding(Assembly asm)

    {

      try

      {

        // Получить описание метаданных для типа SportsCar.

        Type sport = asm.GetType("CarLibrary.SportsCar");

        // Создать объект типа SportsCar.

        object obj = Activator.CreateInstance(sport);

        // Вызвать метод TurnOnRadio() с аргументами.

        MethodInfo mi = sport.GetMethod("TurnOnRadio");

        mi.Invoke(obj, new object[] { true, 2 });

      }

      catch (Exception ex)

      {

        Console.WriteLine(ex.Message);

      }

    }

    В идеале к настоящему времени вы уже видите отношения между рефлексией, динамической загрузкой и поздним связыванием. Естественно, помимо раскрытых здесь возможностей API-интерфейс рефлексии предлагает много дополнительных средств, но вы уже должны быть в хорошей форме, чтобы погрузиться в дальнейшее изучение.

    Вас все еще может интересовать вопрос: когда описанные приемы должны применяться в разрабатываемых приложениях? Ответ прояснится ближе к концу главы, а пока мы займемся исследованием роли атрибутов .NET Core.

    Роль атрибутов .NET

    Как было показано в начале главы, одной из задач компилятора .NET Core является генерация описаний метаданных для всех определяемых типов и для типов, на которые имеются ссылки. Помимо стандартных метаданных, содержащихся в любой сборке, платформа .NET Core предоставляет программистам способ встраивания в сборку дополнительных метаданных с использованием атрибутов. Выражаясь кратко, атрибуты — это всего лишь аннотации кода, которые могут применяться к заданному типу (классу, интерфейсу, структуре и т.п.), члену (свойству, методу и т.д.), сборке или модулю.

    Атрибуты .NET Core представляют собой типы классов, расширяющие абстрактный базовый класс System.Attribute. По мере изучения пространств имен .NET Core вы найдете много предопределенных атрибутов, которые можно использовать в своих приложениях. Более того, вы также можете строить собственные атрибуты для дополнительного уточнения поведения своих типов путем создания нового типа, производного от Attribute.

    Библиотеки базовых классов .NET Core предлагают атрибуты в различных пространствах имен. В табл. 17.3 описаны некоторые (безусловно, далеко не все) предопределенные атрибуты.

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

    Потребители атрибутов

    Как нетрудно догадаться, в состав .NET Core входят многочисленные утилиты, которые действительно ищут разнообразные атрибуты. Сам компилятор C# (csc.exe) запрограммирован на обнаружение различных атрибутов при проведении компиляции. Например, встретив атрибут [CLSCompilant], компилятор автоматически проверяет помеченный им элемент и удостоверяется в том, что в нем открыт доступ только к конструкциям, совместимым с CLS. Еще один пример: если компилятор обнаруживает элемент с атрибутом [Obsolete], тогда он отображает в окне Error List (Список ошибок) среды Visual Studio сообщение с предупреждением.

    В дополнение к инструментам разработки многие методы в библиотеках базовых классов . NET Core изначально запрограммированы на распознавание определенных атрибутов посредством рефлексии. В главе 20 рассматривается сериализация XML и JSON, которая задействует атрибуты для управления процессом сериализации.

    Наконец, можно строить приложения, способные распознавать специальные атрибуты, а также любые атрибуты из библиотек базовых классов .NET Core. По сути, тем самым создается набор "ключевых слов", которые понимает специфичное множество сборок.

    Применение атрибутов в C#

    Чтобы ознакомиться со способами применения атрибутов в С#, создайте новый проект консольного приложения по имени ApplyingAttributes и добавьте ссылку на System.Text.Json. Предположим, что необходимо построить класс под названием Motorcycle (мотоцикл), который может сохраняться в формате JSON. Если какое-то поле сохраняться не должно, тогда к нему следует применить атрибут [JsonIgnore].

    public class Motorcycle

    {

      [JsonIgnore]

      public float weightOfCurrentPassengers;

      // Эти поля остаются сериализируемыми.

      public bool hasRadioSystem;

      public bool hasHeadSet;

      public bool hasSissyBar;

    }

    На заметку! Атрибут применяется только к элементу, находящемуся непосредственно после него.

    В данный момент пусть вас не беспокоит фактический процесс сериализации объектов (он подробно рассматривается в главе 20). Просто знайте, что для применения атрибута его имя должно быть помещено в квадратные скобки.

    Нетрудно догадаться, что к одиночному элементу можно применять множество атрибутов. Предположим, что у вас есть унаследованный тип класса C# (НоrseAndBuggy), который был снабжен атрибутом, чтобы иметь специальное пространство имен XML. Со временем кодовая база изменилась, и класс теперь считается устаревшим для текущей разработки. Вместо того чтобы удалять определение такого класса из кодовой базы (с риском нарушения работы существующего программного обеспечения), его можно пометить атрибутом [Obsolete]. Для применения множества атрибутов к одному элементу просто используйте список с разделителями-запятыми:

    using System;

    using System.Xml.Serialization;

    namespace ApplyingAttributes

    {

        [XmlRoot(Namespace = "http://www.MyCompany.com"),

                Obsolete("Use another vehicle!")]

        // Используйте другое транспортное средство!

        public class HorseAndBuggy

        {

            // ...

        }

    }

    В качестве альтернативы применить множество атрибутов к единственному элементу можно также, указывая их друг за другом (конечный результат будет идентичным):

    [XmlRoot(Namespace = "http://www.MyCompany.com")]

    [Obsolete("Use another vehicle!")]

    public class HorseAndBuggy

    {

      // ...

    }

    Сокращенная система обозначения атрибутов C#

    Заглянув в документацию по .NET Core, вы можете заметить, что действительным именем класса, представляющего атрибут [Obsolete], является ObsoleteAttribute, а не просто Obsolete. По соглашению имена всех атрибутов .NET Core (включая специальные атрибуты, которые создаете вы сами) снабжаются суффиксом Attribute. Тем не менее,

    1 ... 211 212 213 214 215 216 217 218 219 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


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

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

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


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Борис Борис14 июнь 00:50 Колокола в России тем и отличались от западных что раскачиаали именно язык колокола,а не сам колокол! Авторы что-жертвы ЕГЭ? Не... Соединенные Штаты России 3 - Полина Ром
    2. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    3. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    Все комметарии
    Новинки бесплатной онлайн библиотеки