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
Перейти на страницу:

На заметку! На большинстве клавиатур символ

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

Например, предположим, что требуется создать переменную

List&lt;T&gt;
, где
Т
— тип
System.Int3
2. В C# пришлось бы написать такой код:

void SomeMethod()

{

  List&lt;int&gt; myInts = new List&lt;int&gt;();

}

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

<b>// В C#: List&lt;int&gt; myInts = new List&lt;int&gt;();</b>

newobj instance void class [System.Collections]

  System.Collections.Generic.List`1&lt;int32&gt;::.ctor()

Обратите внимание, что обобщенный класс определен как

List'1&lt;int32&gt;
, поскольку
List&lt;T&gt;
имеет единственный параметр типа. А вот как определить тип
Dictionary&lt;string,int&gt;
:

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

newobj instance void class [System.Collections]

  System.Collections.Generic.Dictionary`2&lt;string,int32&gt;

  ::.ctor()

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

<b>// В C#: List&lt;List&lt;int&gt;&gt; myInts = new List&lt;List&lt;int&gt;&gt;();</b>

newobj instance void class [mscorlib]

  System.Collections.Generic.List`1&lt;class

    [System.Collections]

    System.Collections.Generic.List`1&lt;int32&gt;&gt;

    ::.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.

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

На заметку! Типы

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

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

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

Определение полей данных в CIL

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

.field
. Например, добавьте к перечислению
MyEnum
следующие три пары "имя-значение" (обратите внимание, что значения указаны в круглых скобках):

.class public sealed enum MyEnum

{

  .field public static literal valuetype

   MyNamespace.MyEnum A = int32(0)

  .field public static literal valuetype

   MyNamespace.MyEnum B = int32(1)

   .field public static literal valuetype

   MyNamespace.MyEnum C = int32(2)

}

Поля, находящиеся внутри области действия производного от

System.Enum
типа .NET Core, уточняются с применением атрибутов
static
и
literal
. Как не трудно догадаться, эти атрибуты указывают, что данные полей должны быть фиксированными значениями, доступными только из самого типа (например,
MyEnum.А
).

На заметку! Значения, присваиваемые полям в перечислении, также могут быть представлены в шестнадцатеричном формате с префиксом

.

Конечно, когда нужно определить элемент поля данных внутри класса или структуры, вы не ограничены только открытыми статическими литеральными данными. Например, класс

MyBaseClass
можно было бы модифицировать для поддержки двух закрытых полей данных уровня экземпляра со стандартными значениями:

.class public MyBaseClass

{

  .field private string stringField = &quot;hello!&quot;

  .field private int32 intField = int32(42)

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

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

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


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

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


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

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

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


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