Izibook.club
Читать онлайн книги!
  • Главная
  • Жанры
  • Авторы
  • ТОП книг
  • ТОП авторов
  • Контакты

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

Часть 356 из 642 Информация о книге

  IL_0001: stloc.0      // Сохранить это значение по индексу 0.

  IL_0002: br.s IL_000b // Перейти на метку IL_ 0008.

  IL_0003: ldloc.0      // Загрузить значение переменной по индексу 0.

  IL_0004: ldc.i4.1     // Загрузить значение 1 в стек.

  IL_0005: add          // Добавить текущее значение в стеке по индексу 0.

  IL_0006: stloc.0

  IL_0007: ldloc.0      // Загрузить значение по индексу 0.

  IL_0008: ldc.i4.s 10  // Загрузить значение 10 в стек.

  IL_0009: clt          // Меньше значения в стеке?

  IL_000a: stloc.1      // Сохранить результат по индексу 1.

  IL_000b: ldloc.1      // Загрузить значение переменной по индексу 1.

  IL_000c: brtrue.s IL_0002 // Если истинно, тогда перейти на метку IL 0002.

  IL_000d: ret

}

Код CIL начинается с определения локальной переменной типа

int32
и ее загрузки в стек. Затем производятся переходы туда и обратно между метками
IL_0008
и
IL_0004
, во время каждого из которых значение
i
увеличивается на 1 и проверяется на предмет того, что оно все еще меньше 10. Как только условие будет нарушено, осуществляется выход из метода.

Заключительные слова о языке CIL

Ознакомившись с процессом создания исполняемого файла из файла

*.il
, вероятно у вас возникла мысль о том, что он требует чрезвычайно много работы и затем вопрос, в чем здесь выгода. В подавляющем большинстве случаев вы никогда не будете создавать исполняемый файл .NET Core из файла
*.il
. Тем не менее, способность понимать код CIL может принести пользу, когда вам нужно исследовать сборку, для которой отсутствует исходный код.

Существуют также коммерческие инструменты, которые восстанавливают исходный код сборки .NET Core. Если вам доводилось когда-либо пользоваться одним из инструментов подобного рода, то теперь вы знаете, каким образом они работают!

Динамические сборки

Естественно, процесс построения сложных приложений .NET Core на языке CIL будет довольно-таки неблагодарным трудом. С одной стороны, CIL является чрезвычайно выразительным языком программирования, который позволяет взаимодействовать со всеми программными конструкциями, разрешенными CTS. С другой стороны, написание низкоуровневого кода CIL утомительно, сопряжено с большими затратами времени и подвержено ошибкам. Хотя и правда, что знание — сила, вас может интересовать, насколько важно держать в уме все правила синтаксиса CIL. Ответ: зависит от ситуации. Разумеется, в большинстве случаев при программировании приложений .NET Core просматривать, редактировать или писать код CIL не потребуется. Однако знание основ языка CIL означает готовность перейти к исследованию мира динамических сборок (как противоположности статическим сборкам) и роли пространства имен

System.Reflection.Emit
.

Первым может возникнуть вопрос: чем отличаются статические сборки от динамических? По определению статической сборкой называется двоичная сборка .NET, которая загружается прямо из дискового хранилища, т.е. на момент запроса средой CLR она находится где-то на жестком диске в физическом файле (или в наборе файлов, если сборка многофайловая). Как и можно было предположить, при каждой компиляции исходного кода C# в результате получается статическая сборка.

Что касается динамической сборки, то она создается в памяти на лету с использованием типов из пространства имен

System.Reflection.Emit
, которое делает возможным построение сборки и ее модулей, определений типов и логики реализации на языке CIL во время выполнения. Затем сборку, расположенную в памяти, можно сохранить на диск, получив в результате новую статическую сборку. Ясно, что процесс создания динамических сборок с помощью пространства имен
System.Reflection.Emit
требует понимания природы кодов операций CIL.

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

• Вы строите инструмент программирования .NET Core, который должен быть способным генерировать сборки по требованию на основе пользовательского ввода.

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

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

Давайте посмотрим, какие типы доступны в пространстве имен

System.Reflection.Emit
.

Исследование пространства имен System.Reflection.Emit

Создание динамической сборки требует некоторых знаний кодов операций CIL, но типы из пространства имен

System.Reflection.Emit
максимально возможно скрывают сложность языка CIL. Скажем, вместо указания необходимых директив и атрибутов CIL для определения типа класса можно просто применять класс
TypeBuilder
. Аналогично, если нужно определить новый конструктор уровня экземпляра, то не придется задавать лексему
specialname
,
rtspecialname
или
.ctor
; взамен можно использовать класс
ConstructorBuilder
. Основные члены пространства имен
System.Reflection.Emit
описаны в табл. 19.7.

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

В целом типы из пространства имен

System.Reflection.Emit
позволяют представлять низкоуровневые лексемы CIL программным образом во время построения динамической сборки. Вы увидите многие из них в рассматриваемом далее примере; тем не менее, тип
ILGenerator
заслуживает специального внимания.

Роль типа System.Reflection.Emit.ILGenerator

Роль типа

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

Вот пример:

// Получить объект ILGenerator из объекта ConstructorBuilder

// по имени myCtorBuilder.

Перейти к странице:
Предыдущая страница
Следующая страница
Жанры
  • Военное дело 4
    • Спецслужбы 4
  • Деловая литература 203
    • Банковское дело 3
    • Деловая литература 2
    • Корпоративная культура 13
    • Личные финансы 21
    • Малый бизнес 2
    • Маркетинг, PR, реклама 45
    • О бизнесе популярно 112
    • Отраслевые издания 2
    • Управление, подбор персонала 17
    • Ценные бумаги, инвестиции 3
    • Экономика 28
  • Детективы и триллеры 2766
    • Боевики 314
    • Дамский детективный роман 21
    • Детективы 424
    • Иронические детективы 182
    • Исторические детективы 416
    • Классические детективы 222
    • Криминальные детективы 156
    • Крутой детектив 119
    • Маньяки 15
    • Медицинский триллер 2
    • Политические детективы 44
    • Полицейские детективы 235
    • Прочие Детективы 817
    • Техно триллер 3
    • Триллеры 1201
    • Шпионские детективы 101
  • Детские 496
    • Детская образовательная литература 13
    • Детская проза 165
    • Детские остросюжетные 53
    • Детские приключения 262
    • Детские стихи 21
    • Детский фольклор 1
    • Книга-игра 1
    • Прочая детская литература 77
  • Детские книги 531
    • Детская фантастика 196
    • Детские детективы 3
    • Книги для подростков 23
    • Сказки 265
  • Документальная литература 809
    • Биографии и мемуары 531
    • Военная документалистика 7
    • Искусство и Дизайн 14
    • Критика 11
    • Научпоп 9
    • Прочая документальная литература 73
    • Публицистика 257
  • Дом и Семья 215
    • Домашние животные 14
    • Здоровье и красота 34
    • Кулинария 33
    • Прочее домоводство 8
    • Развлечения 3
    • Сад и Огород 8
    • Сделай сам 2
    • Спорт 10
    • Хобби и ремесла 7
    • Эротика и секс 110
  • Драматургия 109
    • Драма 106
    • Киносценарии 3
    • Мистерия 1
    • Трагедия 1
  • Жанр не определен 8
    • Разное 8
  • Компьютеры и Интернет 15
    • Базы данных 3
    • Интернет 3
    • Программирование 1
    • Программное обеспечение 1
    • Прочая компьютерная литература 10
  • Любовные романы 26609
    • Исторические любовные романы 956
    • Короткие любовные романы 2679
    • Любовно-фантастические романы 11047
    • Остросюжетные любовные романы 988
    • Порно 90
    • Прочие любовные романы 57
    • Слеш 417
    • Современные любовные романы 10986
    • Фемслеш 44
    • Эротика 6557
  • Научно-образовательная 374
    • Альтернативная медицина 5
    • Астрономия и Космос 7
    • Биология 32
    • Биофизика 2
    • Биохимия 2
    • Ботаника 3
    • Военная история 4
    • Геология и география 3
    • Государство и право 1
    • Детская психология 16
    • Зоология 3
    • Иностранные языки 2
    • Культурология 46
    • Литературоведение 20
    • Медицина 35
    • Обществознание 7
    • Педагогика 20
    • Политика 22
    • Прочая научная литература 58
    • Психотерапия и консультирование 51
    • Религиоведение 7
    • Секс и семейная психология 30
    • Технические науки 4
    • Физика 9
    • Философия 34
    • Химия 3
    • Экология 3
    • Юриспруденция 9
    • Языкознание 18
  • Образование 523
    • Бизнес 45
    • Биография и мемуары 46
    • Здоровье 10
    • История 297
    • Карьера 4
    • Психология 230
  • Поэзия и драматургия 43
    • Басни 2
    • Драматургия 11
    • Лирика 2
    • Поэзия 31
  • Приключения 762
    • Вестерны 14
    • Исторические приключения 420
    • Морские приключения 79
    • Природа и животные 31
    • Прочие приключения 212
    • Путешествия и география 52
  • Проза 2421
    • Антисоветская литература 5
    • Афоризмы 1
    • Военная проза 111
    • Историческая проза 321
    • Классическая проза 135
    • Контркультура 14
    • Магический реализм 93
    • Новелла 14
    • Повесть 24
    • Проза прочее 21
    • Рассказ 73
    • Роман 103
    • Русская классическая проза 73
    • Семейный роман/Семейная сага 3
    • Сентиментальная проза 10
    • Советская классическая проза 47
    • Современная проза 1861
    • Эпистолярная проза 2
    • Эпопея 5
    • Эссе, очерк, этюд, набросок 3
  • Прочее 1519
    • Газеты и журналы 5
    • Изобразительное искусство, фотография 12
    • Кино 13
    • Музыка 11
    • Подростковая литература 6
    • Театр 5
    • Фанфик 1472
  • Религия и духовность 364
    • Астрология 1
    • Буддизм 4
    • Православие 1
    • Прочая религиозная литература 4
    • Религия 24
    • Самосовершенствование 138
    • Хиромантия 1
    • Эзотерика 212
    • Язычество 1
  • Справочная литература 42
    • Прочая справочная литература 3
    • Путеводители 10
    • Руководства 12
    • Справочники 15
    • Энциклопедии 9
  • Старинная литература 153
    • Античная литература 1
    • Древневосточная литература 5
    • Мифы. Легенды. Эпос 34
    • Прочая старинная литература 114
  • Техника 2
    • Автомобили и ПДД 1
    • Архитектура 1
  • Фантастика и фентези 28654
    • Альтернативная история 4198
    • Боевая фантастика 5385
    • Героическая фантастика 1490
    • Городское фэнтези 2293
    • Готический роман 13
    • Детективная фантастика 753
    • Ироническая фантастика 102
    • Ироническое фэнтези 83
    • Историческое фэнтези 531
    • Киберпанк 318
    • Космическая фантастика 1819
    • Космоопера 56
    • ЛитРПГ 1331
    • Любовная фантастика 186
    • Любовное фэнтези 115
    • Мистика 520
    • Научная фантастика 931
    • Попаданцы 9511
    • Постапокалипсис 919
    • Сказочная фантастика 26
    • Социально-философская фантастика 546
    • Стимпанк 151
    • Технофэнтези 143
    • Ужасы 103
    • Ужасы и мистика 825
    • Фантастика 254
    • Фантастика: прочее 232
    • Фэнтези 11572
    • Эпическая фантастика 236
    • Юмористическая фантастика 1075
    • Юмористическое фэнтези 1679
  • Фольклор 7
    • Загадки 1
    • Народные сказки 5
    • Фольклор: прочее 2
  • Юмор 194
    • Анекдоты 1
    • Комедии 1
    • Прочий юмор 67
    • Сатира 3
    • Юмористическая проза 123
    • Юмористические стихи 5
Izibook.club

Бесплатная онлайн библиотека для чтения книг без регистрации с телефона или компьютера. У нас собраны последние новинки, мировые бестселлеры книжного мира.

Контакты
  • pereezdsayta@yandex.ru
Информация
  • Карта сайта
© izibook.club, 2026. | Вход
Этот сайт использует cookie для хранения данных. Продолжая пользоваться сайтом, вы даете свое согласие на работу с этими данными в соответствии с нашей политикой конфиденциальности.
Я согласен