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 ... 228 229 230 231 232 233 234 235 236 ... 407
    Перейти на страницу:
    множество добавочных квалификаторов, которые управляют видимостью типа, компоновкой полей и т.д. В табл. 19.2 описаны избранные атрибуты, которые могут применяться в сочетании с директивой .class.

    Определение и реализация интерфейсов в CIL

    Несколько странно, но типы интерфейсов в CIL определяются с применением директивы .class. Тем не менее, когда директива .class декорирована атрибутом interface, тип трактуется как интерфейсный тип CTS. После определения интерфейс можно привязывать к типу класса или структуры с использованием атрибута implements:

    .namespace MyNamespace

    {

      // Определение интерфейса.

      .class public interface IMyInterface {}

      // Простой базовый класс.

      .class public MyBaseClass {}

      // Теперь MyDerivedClass реализует IMylnterface

      // и расширяет MyBaseClass.

      .class public MyDerivedClass

        extends MyNamespace.MyBaseClass

        implements MyNamespace.IMyInterface {}

    }

    На заметку! Конструкция extends должна предшествовать конструкции implements. Кроме того, в конструкции implements может содержаться список интерфейсов с разделителями-запятыми

    Вспомните из главы 8, что интерфейсы могут выступать в роли базовых для других типов интерфейсов, позволяя строить иерархии интерфейсов. Однако вопреки возможным ожиданиям применять атрибут extends для порождения интерфейса А от интерфейса В в CIL нельзя. Атрибут extends используется только для указания базового класса типа. Когда интерфейс необходимо расширить, снова будет применяться атрибут implements, например:

    // Расширение интерфейсов в CIL.

    .class public interface IMyInterface {}

    .class public interface IMyOtherInterface

      implements MyNamespace.IMyInterface {}

    Определение структур в CIL

    Директива .class может использоваться для определения любой структуры CTS, если тип расширяет System.ValueType. Кроме того, такая директива .class должна уточняться атрибутом sealed (учитывая, что структуры никогда не могут выступать в роли базовых для других типов значений). Если попытаться поступить иначе, тогда компилятор ilasm.exe выдаст сообщение об ошибке.

    // Определение структуры всегда является запечатанным.

    .class public sealed MyStruct

      extends [System.Runtime]System.ValueType{}

    Имейте в виду, что в CIL предусмотрен сокращенный синтаксис для определения типа структуры. В случае применения атрибута value новый тип автоматически становится производным от [System.Runtime]System.ValueType. Следовательно, тип MyStruct можно было бы определить и так:

    // Сокращенный синтаксис объявления структуры.

    .class public sealed value MyStruct{}

    Определение перечислений в CIL

    Перечисления .NET Core порождены от класса System.Enum, который является System.ValueType (и потому также должен быть запечатанным). Чтобы определить перечисление в CIL, необходимо просто расширить [System.Runtime]System.Enum:

    // Перечисление.

    .class public sealed MyEnum

      extends [System.Runtime]System.Enum{}

    Подобно структурам перечисления могут быть определены с помощью сокращенного синтаксиса, используя атрибут enum:

    // Сокращенный синтаксис определения перечисления.

    .class public sealed enum MyEnum{}

    Вскоре вы увидите, как указывать пары "имя-значение" перечисления.

    Определение обобщений в CIL

    Обобщенные типы также имеют собственное представление в синтаксисе CIL. Вспомните из главы 10, что обобщенный тип или член может иметь один и более параметров типа. Например, в типе List<T> определен один параметр типа, а в Dictionary<TKey,TValue> — два. В CIL количество параметров типа указывается с применением символа обратной одиночной кавычки ('), за которым следует число, представляющее количество параметров типа. Как и в С#, действительные значения параметров типа заключаются в угловые скобки.

    На заметку! На большинстве клавиатур символ ' находится на клавише, расположенной над клавишей <ТаЬ> (и слева от клавиши <1>).

    Например, предположим, что требуется создать переменную List<T>, где Т — тип System.Int32. В C# пришлось бы написать такой код:

    void SomeMethod()

    {

      List<int> myInts = new List<int>();

    }

    В CIL необходимо поступить следующим образом (этот код может находиться внутри любого метода CIL):

    // В C#: List<int> myInts = new List<int>();

    newobj instance void class [System.Collections]

      System.Collections.Generic.List`1<int32>::.ctor()

    Обратите внимание, что обобщенный класс определен как List'1<int32>, поскольку List<T> имеет единственный параметр типа. А вот как определить тип Dictionary<string,int>:

    // В C#: Dictionary<string, int> d = new Dictionary<string, int>();

    newobj instance void class [System.Collections]

      System.Collections.Generic.Dictionary`2<string,int32>

      ::.ctor()

    Рассмотрим еще один пример: пусть имеется обобщенный тип, использующий в качестве параметра типа другой обобщенный тип. Код CIL выглядит следующим образом:

    // В C#: List<List<int>> myInts = new List<List<int>>();

    newobj instance void class [mscorlib]

      System.Collections.Generic.List`1<class

        [System.Collections]

        System.Collections.Generic.List`1<int32>>

        ::.ctor()

    Компиляция файла CILTypes.il

    Несмотря на то что к определенным ранее типам пока не были добавлены члены или код реализации, вы можете скомпилировать файл *.il в DLL-сборку .NET Core (так и нужно поступать ввиду отсутствия метода Main()). Откройте окно командной строки и введите показанную ниже команду:

    dotnet build

    Затем можете открыть скомпилированную сборку в ildasm.exe, чтобы удостовериться в создании каждого типа. Чтобы понять, каким образом заполнить тип содержимым, сначала необходимо ознакомиться с фундаментальными типами данных CIL.

    Соответствия между типами данных в библиотеке базовых классов .NET Core, C# и CIL

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

    На заметку! Типы System.IntPtr и System.UIntPtr отображаются на собственные типы int и unsigned int в CIL (это полезно знать, т.к. они интенсивно применяются во многих сценариях взаимодействия с СОМ и P/Invoke).

    Определение членов типов в CIL

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

    1 ... 228 229 230 231 232 233 234 235 236 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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