Резюме
В этой главе вы увидели силу Reflection.Emit
API для генерации кода во время выполнения. Вы узнали о кодах операций, которые являются основой для каждого .NET языка, и о том, как они используются, чтобы определить и структурировать реализации. Вы нашли мощные методы для отладки динамического кода, чтобы обеспечить его правильность. Вы обнаружили два различных варианта в этом API и увидели ситуации, когда следует использовать тот или иной вариант. С этой обретенной информацией теперь у вас есть целый ряд инструментов, чтобы генерировать код во время выполнения для сценариев, упомянутых в разделе 5.2. Нужен новый тип, который выступит в качестве посредника объекта или mock типа? Создайте его с классами Reflection.Emit
. Хотите оптимизировать путь вызовов, который определяется во время выполнения? Постройте динамический метод. Хотите сделать компилятор для языка, который вы создали? Вы можете использовать для этого классы Reflection.Emit
. Каждый раз, когда у вас есть необходимость генерировать код во время выполнения,System.Reflection.Emit
является вашим другом.
Хотя генерация кода при помощи кодов операций является чрезвычайно мощной, есть еще один способ в .NET для выполнения такой работы с использованием API более высокого уровня, который, возможно, легче понять, но он такой же мощный, как сырое использование кодов операций. Эта техника использует так называемые выражения, и это то, о чем речь пойдет в следующей главе.