Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Исследование пространства имен 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 заслуживает отдельного обсуждения.

Оглавление книги


Генерация: 1.532. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз