При рассмотрении IL использование Ildasm Вы найдете что они оба компиляция вниз к Nullable
.
Я считаю, что полезно посмотреть на Dynamic Language Runtime , которая более или менее предназначен для создания языков высокого уровня на основе .NET.
Возможно, стоит также взглянуть на некоторые из предыдущих потоков переполнения стека на языках, специфичных для домена , которые содержат некоторые полезные ссылки на инструменты для работы с DSL, что немного похоже на то, что вы планируете, хотя я ' m все еще не совсем понятно из вопроса, какова ваша цель.
Большинство вещей «щелкни и играй» должно быть достаточно простым, чтобы просто склеить некоторые заранее определенные строительные блоки вместе (возможно, с использованием интерфейсов на границах). Это означает: вам может не понадобиться генерировать динамический код - просто «подделайте». Например, использование объектов пакета свойств (таких как DataTable
и т. Д., Хотя это не мой первый выбор) для значений и т. Д.
Другой вариант для динамической оценки - это Expression
класс; особенно в .NET 4.0, он чрезвычайно универсален и позволяет выполнять компиляцию для делегата.
Создайте исходный код на C # и не заботьтесь о скорости, пока это не имеет значения. Компилятор C # работает довольно быстро.
Это зависит от ваших требований, CodeDOM, безусловно, лучше всего подходит для «программы», хранящей ее в «модели данных».
Однако маловероятно, что использование варианта 2 будет в в любом случае заметно медленнее по сравнению с любым другим подходом.
Когда я писал генератор динамического кода, я сильно полагался на System.Reflection.Emit.
По сути, вы программно создаете динамические сборки и добавляете к ним новые типы. Эти типы создаются с использованием конструкций Emit (свойства, события, поля и т. Д.). Когда дело доходит до реализации методов, вам придется использовать ILGenerator, чтобы накачать коды операций MSIL в ваш метод. Звучит очень страшно, но вы можете использовать пару инструментов, которые помогут:
Я бы повторил другие в том, что 1) компилятор работает быстро, и 2 ) "Щелкни и играй" должно быть достаточно простым, чтобы ни один виджет, добавленный к стопке виджетов, не мог превратить ее в незаконную стопку.
Удачи. Я скептически отношусь к тому, что вы можете достичь пункта (2) ни для чего, кроме программ игрушечного уровня.