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

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

Для создания динамического компоновочного блока требуется в определенной мере понимать коды операций CIL, но типы пространства имен System.Reflection. Emit в максимальной мере "пытаются" скрыть сложность CIL. Например, вместо прямого указания необходимых директив и атрибутов CIL при определении типа класса вы можете просто использовать класс TypeBuilder. Точно так же, чтобы определить новый конструктор уровня экземпляра, нет никакой необходимости использовать specialname, rtspecialname и лексемы .ctor – вместо этого можно просто использовать ConstructorBuilder. Описания ключевых членов пространства имен System.Reflection.Emit приводятся в табл. 15.8.

Таблица 15.8. Избранные члены пространства имен System.Reflection.Emit

Члены Описание
AssemblyBuilder Используется для создания компоновочного блока (*.dll или *.exe) в среде выполнения. В случае *.exe следует вызвать метод ModuleBuilder.SetEntryPoint(), чтобы указать метод, являющийся точкой входа в модуль. Если точка входа не указана, будет сгенерирована *.dll
ModuleBuilder Используется для определения множества модулей в рамках данного компоновочного блока
EnumBuilder Используется для создания типа перечня .NET
TypeBuilder Может использоваться дли создания классов, интерфейсов, структур и делегатов в рамках модуля в среде выполнения
MethodBuilder EventBuilder LocalBuilder PropertyBuilder FieldBuilder ConstructorBuilder CustomAttributeBuilder ParameterBuilder Используются для создания членов типа (таких как методы, локальные переменные, свойства, конструкторы и атрибуты) в среде выполнения
ILGenerator Генерирует коды операций CIL в данном члене типа
OpCodes Обеспечивает множество полей, отображающихся в коды операций CIL. Этот тип используется вместе с различными членами System.Reflection.Emit.ILGenerator

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Интерфейсы из пространства имен System.Collections

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Интерфейсы из пространства имен System.Collections В качестве самого примитивного контейнера может выступать тип System.Array. В главе 3 было показано, что класс System.Array предлагает целый ряд соответствующих возможностей (таких, как инвертирование, сортировка, очистка и перечисление).


Классы из пространства имен System.Collections

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Классы из пространства имен System.Collections Еще раз подчеркнем, что интерфейсы остаются бесполезными до тех пор, пока они не реализованы соответствующим классом или соответствующей структурой. В табл. 7.3 предлагаются описания основных классов из пространства имен System.Collections


Анализ пространства имен System.IO

Из книги Технология XSLT автора Валиков Алексей Николаевич

Анализ пространства имен System.IO В .NET пространство имен System.IO является той частью библиотек базовых адресов, которая обслуживает службы ввода-вывода, как для файлов, так и для памяти. Подобно любому другому пространству имен, System.IO определяет свой набор классов,


Обзор пространства имен System.Windows.Forms

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Обзор пространства имен System.Windows.Forms Как и любое другое пространство имен, System.Windows.Forms компонуется из различных классов, структур, делегатов, интерфейсов и перечней. Хотя различие между консольным (CUI) и графическим (GUI) интерфейсами, на первый взгляд, кажется подобным


Обзор пространства имен System.Drawing

Из книги Linux программирование в примерах автора Роббинс Арнольд

Обзор пространства имен System.Drawing Большинство типов, которые вам придется использовать при создании GDI-приложений, содержится в пространстве имен System.Drawing. Как и следует ожидать, здесь есть классы, представляющие изображения, кисти, перья и шрифты. Кроме того, System.Drawing


Обзор пространства имен System.Drawing.Drawing2D

Из книги C++ для начинающих автора Липпман Стенли

Обзор пространства имен System.Drawing.Drawing2D Теперь, когда мы обсудили возможности использования типа Font, следующей нашей задачей будет рассмотрение объектов Pen и Brush, предназначенных для визуализации геометрических шаблонов. Вы, конечно, можете ограничиться использованием


Пространства имен ASP.NET 2.0

Из книги QT 4: программирование GUI на С++ автора Бланшет Жасмин

Пространства имен ASP.NET 2.0 В библиотеках базовых классов .NET 2.0 предлагается не менее 34 пространств имен, имеющих отношение к Web. Всю эту совокупность пространств имен можно разбить на четыре главные группы.• Базовые функциональные возможности (типы, обеспечивающие


1.4. Пространства имен

Из книги автора

1.4. Пространства имен Если два неродственных процесса используют какой-либо вид IPC для обмена информацией, объект IPC должен иметь имя или идентификатор, чтобы один из процессов (называемый обычно сервером — server) мог создать этот объект, а другой процесс (обычно один или


Пространства имен

Из книги автора

Пространства имен В программе на языке Си имена (идентификаторы) используются для ссылок на различного рода объекты — функции, переменные, формальные параметры и т. п. При соблюдении определенных правил, описанных в данном разделе, допускается использование одного и


8.5.1. Определения пространства имен

Из книги автора

8.5.1. Определения пространства имен Определение пользовательского пространства имен начинается с ключевого слова namespace, за которым следует идентификатор. Он должен быть уникальным в той области видимости, в которой определяется данное пространство; наличие другой


8.5.5. ПОО и члены пространства имен

Из книги автора

8.5.5. ПОО и члены пространства имен Как уже было сказано, определение пространства имен может состоять из разрозненных частей и размещаться в разных файлах. Следовательно, член пространства разрешено объявлять во многих файлах. Например:// primer.hnamespace cplusplus_primer {// ...void inverse(


8.5.6. Безымянные пространства имен

Из книги автора

8.5.6. Безымянные пространства имен Может возникнуть необходимость определить объект, функцию, класс или любую другую сущность так, чтобы она была видимой только в небольшом участке программы. Это еще один способ решения проблемы засорения глобального пространства


8.6.1. Псевдонимы пространства имен

Из книги автора

8.6.1. Псевдонимы пространства имен Псевдоним пространства имен используется для задания короткого синонима имени пространства. Например, длинное имяnamespace International_Business_Machines{ /* ... */ }может быть ассоциировано с более коротким синонимом:namespace IBM = International_Business_Machines;Объявление