Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Роль System.Reflection.Emit.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
Метод | Описание |
---|---|
BeginCatchBlock() | Начинает блок catch |
BeginExceptionBlock() | Начинает блок неотфильтрованного исключения |
BeginFinallyBlock() | Начинает блок finally |
BeginScope() | Начинает лексический контекст |
DeclareLocal() | Объявляет локальную переменную |
DefineLabel() | Объявляет новую метку |
Emit() | Является перегруженным и позволяет генерировать коды операций CIL |
EmitCall() | Вставляет код операции call или callvirt в поток CIL |
EmitWriteLine() | Генерирует вызов Console.WriteLine() с различными типами значений |
EndExceptionBlock() | Завершает блок исключения |
EndScope() | Завершает лексический контекст |
ThrowException() | Создает инструкцию для генерирования исключения |
UsingNamespace() | Указывает пространство имен, которое будет использоваться для оценки локальных переменных и наблюдаемых значений в текущем активном лексическом контексте |
Ключевым методом ILGenerator является метод Emit(), который работает в совокупности с типом класса System.Reflection.Emit.OpCodes. Как уже упоминалось в этой главе, данный тип открывает большой набор доступных только для чтения полей, отображающихся в коды операций CIL. Полностью эти члены описаны в оперативно доступной системе справки, но целый ряд примеров вы сможете увидеть и на следующих страницах.
- Исследование пространства имен System.Reflection.Emit
- Роль System.Reflection.Emit.ILGenerator
- Генерирование динамического компоновочного блока
- Генерирование компоновочного блока и набора модулей
- Роль типа ModuleBuilder
- Генерирование типа HelloClass и принадлежащей ему строковой переменной
- Генерирование конструкторов
- Генерирование метода HelloWorld()
- Использование динамически сгенерированного компоновочного блока
- Исследование пространства имен System.Reflection.Emit
- Роль товарной категории и установление цены
- Роль папки Bin
- System tools used for debugging
- Integrated Secure Communications System
- Контрольные вопросы
- Глава 14. Почему потребительский опыт играет важную роль в выстраивании клиентских взаимоотношений
- Запуск сценариев на удаленных машинах. Контроль за ходом выполнения таких сценариев
- З.1.2. Пароль BIOS не сбрасывается даже при удалении батарейки. Почему?
- Не хочу, чтобы компьютером пользовались в мое отсутствие. Как установить пароль и блокировать машину?
- Где лучше хранить свой пароль?
- Я забыл пароль входа в Windows, можно ли зайти в систему, не зная пароля?