Всё, о чём писалось до этого момента – суть СТАТИЧЕСКИЕ СБОРКИ. Статические сборки существуют в виде файлов на диске или других носителях. В случае необходимости загружаются в оперативную память и выполняются благодаря функциональным возможностям класса Assembly.
Динамические сборки создаются непосредственно в ходе выполнения приложения (статической сборки) и существуют в оперативной памяти. По завершении выполнения приложения обречены на бесследное исчезновение, если, конечно, не были предприняты особые усилия по их сохранению на диск.
Для работы с динамическими сборками используется пространство имён System.Reflection.Emit.
Emit – излучать, испускать, выпускать (деньги).
Это множество типов позволяет создавать и выполнять динамические сборки, а также ДОБАВЛЯТЬ НОВЫЕ типы и члены в загруженные в оперативную память сборки.
Пространство имен System.Reflection.Emit содержит классы, позволяющие компилятору или инструментальным средствам создавать метаданные и инструкции промежуточного языка MSIL и при необходимости формировать на диске PE-файл. Эти классы предназначены в первую очередь для обработчиков сценариев и компиляторов.
Список классов, структур и перечислений, входящих в пространство, прилагается.
Классы
Класс
Описание
AssemblyBuilder
Определяет и представляет динамическую сборку.
ConstructorBuilder
Определяет и представляет конструктор динамического класса.
CustomAttributeBuilder
Помогает в построении пользовательских атрибутов.
EnumBuilder
Описывает и предоставляет тип перечисления.
EventBuilder
Определяет события для класса.
FieldBuilder
Определяет и предоставляет поле. Этот класс не наследуется.
ILGenerator
Создает инструкции промежуточного языка MSIL.
LocalBuilder
Представляет локальную переменную внутри метода или конструктора.
MethodBuilder
Определяет и предоставляет метод (или конструктор) для динамического класса.
MethodRental
Позволяет быстро менять реализацию основного текста сообщения метода, задающего метод класса.
ModuleBuilder
Определяет и представляет модуль. Получает экземпляр класса ModuleBuilder с помощью вызова метода DefineDynamicModule.
OpCodes
Содержит поля, предоставляющие инструкции промежуточного языка MSIL для эмиссии членами класса ILGenerator (например, методом Emit).
ParameterBuilder
Создает или связывает информацию о параметрах.
PropertyBuilder
Определяет свойства для типа.
SignatureHelper
Обеспечивает методы построения подписей.
TypeBuilder
Определяет и создает новые экземпляры классов во время выполнения.
UnmanagedMarshal
Представляет класс, описывающий способ маршалирования поля из управляемого в неуправляемый код. Этот класс не наследуется.
Структуры
Структура
Описание
EventToken
Предоставляет Token, возвращаемый метаданными для представления события.
FieldToken
Структура FieldToken является объектным представлением лексемы, представляющей поле.
Label
Представляет метку в потоке инструкций. Label используется вместе с классом ILGenerator.
MethodToken
Структура MethodToken является объектным представлением лексемы, представляющей метод.
OpCode
Описывает инструкцию промежуточного языка MSIL.
ParameterToken
Структура ParameterToken является закрытым представлением возвращаемого метаданными лексемы, используемого для представления параметра.
PropertyToken
Структура PropertyToken является закрытым представлением возвращаемого метаданными маркера Token, используемого для представления свойства.
SignatureToken
Предоставляет Token, возвращенный метаданными для представления подписи.
StringToken
Предоставляет лексему, которая предоставляет строку.
TypeToken
Представляет маркер Token, который возвращается метаданными, чтобы представить тип.
Перечисления
Перечисление
Описание
AssemblyBuilderAccess
Определяет режимы доступа для динамической сборки.
FlowControl
Описывает, каким образом инструкция меняет поток команд управления.
OpCodeType
Описывает типы инструкций промежуточного языка MSIL.
OperandType
Описывает тип операнда инструкции промежуточного языка MSIL.
PackingSize
Задает один из двух факторов, определяющих выравнивание занимаемой полями памяти при маршаллинге типа.
PEFileKinds
Задает тип переносимого исполняемого PE-файла.
StackBehaviour
Описывает, как значения помещаются в стек или выводятся из стека.