Класс System.Reflection.Emit.DynamicILInfo

Замечание

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

DynamicILInfo Используйте класс для записи собственных генераторов MSIL вместо использованияILGenerator.

Чтобы создать экземпляры других типов, вызывать методы, обращаться к полям или ссылаться на типы, сгенерированный вами MSIL должен содержать маркеры для этих сущностей. Класс DynamicILInfo предоставляет несколько перегрузок метода GetTokenFor, которые возвращают маркеры, действительные в области текущего DynamicILInfo. Например, если необходимо вызвать перегрузку Console.WriteLine метода, можно получить RuntimeMethodHandle для этой перегрузки и передать его GetTokenFor методу, чтобы получить маркер для внедрения в MSIL.

После создания Byte массивов для локальной сигнатуры, исключений и текста кода можно использовать SetCodeSetExceptionsметоды и SetLocalSignature методы для их вставки в связанный DynamicMethod с DynamicILInfo ним объект.

Для создания собственных метаданных и MSIL требуется знакомство с документацией по инфраструктуре общего языка (CLI), особенно "Секция II: определение метаданных и семантика" и "Набор инструкций Partition III: CIL". Дополнительные сведения см. в статье ECMA 335 Common Language Infrastructure (CLI).

Замечание

Не используйте DynamicILInfo для создания кода, который создает делегат для другого динамического метода путем вызова конструктора делегата напрямую. Вместо этого используйте CreateDelegate метод для создания делегата. Делегат, созданный с помощью конструктора делегата, не имеет ссылки на целевой динамический метод. Динамический метод может быть восстановлен сборкой мусора, пока делегат по-прежнему используется.