Руководство по использованию
В следующей таблице приведены рекомендации по использованию техник, продемонстрированных в главах 2-10. Они должны помочь вам в принятии решений о том, когда использовать определенный подход или фреймворк, в зависимости от архитектуры и параметров построения. Глава 1 не входит сюда, потому что это, по сути, вводная глава.
Глава | Технология | Руководство |
2 Изучение кода и метаданных при помощи рефлексии | ИспользованиеSystem.Reflection API |
Использование произвольных элементов кода (например, методов, свойств и т.д.) на основе определений базового класса или стандартных соглашений по именованиям; составление путей динамического кода во время выполнения или выполнение кода на основе существующих метаданных |
3 Text Template Transformation Toolkit (T4) | Использование движка T4 | Генерация нового текста (обычно кода) с помощью шаблонов для упрощения создания подобного кода |
4 Создание кода при помощи CodeDOM | Использование System.CodeDom API |
Создание нового кода из API, основанного на выражениях, для различных языков |
5 Создание кода при помощи Reflection.Emit |
ИспользованиеSystem.Reflection.Emit API |
Создание и выполнение нового кода во время выполнения на уровне IL, как для целых типов, так и различных методов; или компиляция динамических, открытых путей выполнения кода на основе рефлексии в целях повышения производительности |
6 Создание кода при помощи выражений | Использование System.Linq.Expressions API |
Создание новых методов во время выполнения при помощи высокоуровневого API или выражений |
7 Создание кода при помощи переписывания IL | Использование Cecil API | Статический анализ сборок; полный контроль над содержимым сборки или послекомпиляционное внедрение нового кода в любую сборку |
8 Dynamic Language Runtime (DLR) | Использование DLR | Поддержка динамических и скриптовых языков в .NET; обработка выполнения динамического кода в .NET без непосредственного использования рефлексии |
Языки программирования и инструменты | Использование альтернативных языков (например, Boo) или сторонних библиотек (например, PostSharp) | Эксперименты с концепциями кодирования, которые не поддерживаются в C# или VB, а также использование существующих фреймворков для обработки концепций метапрограммирования |
Управление .NET компилятором | Использование Project Roslyn | Использование сервисов компилятора для модификации кода; анализ в режиме реального времени C# или VB кода; интеграция в Visual Studio пользовательского баг-трекингового кода и рефакторинга |