| Члены | Описание |
|---|---|
| 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.Reflection.Emit.ILGenerator
Как следует из самого имени указанного типа, роль ILGenerator заключается в добавлении кодов операций CIL в данный член типа. Обычно нет необходимости непосредственно создавать объект ILGenerator, а нужно просто получить действительную ссылку на тип ILGenerator, используя типы, связанные с компоновщиком (такие как MethodBuilder и ConstructorBuilder). Например:
// Получение ILGenerator из объекта ConstructorBuilder
// с именем 'myCtorBuilder'.
ConstructorBuilder myCtorBuilder = new ConstructorBuilder (/*…различные аргументы… */);
ILGenerator myCILGen = myCtorBuilder.GetILGenerator;
Имея ILGenerator, вы можете генерировать "сырые" коды операций CIL, используя любые из целого набора методов. Некоторые (но, конечно же, не все) методы ILGenerator описаны в табл. 15.9.
Таблица 15.9. Подборка методов ILGenerator