Динамическая генерация кода

При рассмотрении IL использование Ildasm Вы найдете что они оба компиляция вниз к Nullable.

5
задан Peter Mortensen 17 November 2009 в 11:47
поделиться

6 ответов

Я считаю, что полезно посмотреть на Dynamic Language Runtime , которая более или менее предназначен для создания языков высокого уровня на основе .NET.

Возможно, стоит также взглянуть на некоторые из предыдущих потоков переполнения стека на языках, специфичных для домена , которые содержат некоторые полезные ссылки на инструменты для работы с DSL, что немного похоже на то, что вы планируете, хотя я ' m все еще не совсем понятно из вопроса, какова ваша цель.

4
ответ дан 14 December 2019 в 04:40
поделиться

Большинство вещей «щелкни и играй» должно быть достаточно простым, чтобы просто склеить некоторые заранее определенные строительные блоки вместе (возможно, с использованием интерфейсов на границах). Это означает: вам может не понадобиться генерировать динамический код - просто «подделайте». Например, использование объектов пакета свойств (таких как DataTable и т. Д., Хотя это не мой первый выбор) для значений и т. Д.

Другой вариант для динамической оценки - это Expression класс; особенно в .NET 4.0, он чрезвычайно универсален и позволяет выполнять компиляцию для делегата.

2
ответ дан 14 December 2019 в 04:40
поделиться

Создайте исходный код на C # и не заботьтесь о скорости, пока это не имеет значения. Компилятор C # работает довольно быстро.

1
ответ дан 14 December 2019 в 04:40
поделиться

Это зависит от ваших требований, CodeDOM, безусловно, лучше всего подходит для «программы», хранящей ее в «модели данных».

Однако маловероятно, что использование варианта 2 будет в в любом случае заметно медленнее по сравнению с любым другим подходом.

0
ответ дан 14 December 2019 в 04:40
поделиться

Когда я писал генератор динамического кода, я сильно полагался на System.Reflection.Emit.

По сути, вы программно создаете динамические сборки и добавляете к ним новые типы. Эти типы создаются с использованием конструкций Emit (свойства, события, поля и т. Д.). Когда дело доходит до реализации методов, вам придется использовать ILGenerator, чтобы накачать коды операций MSIL в ваш метод. Звучит очень страшно, но вы можете использовать пару инструментов, которые помогут:

  • Предварительно созданный образец реализации
  • ILDasm для проверки кодов операций образца реализации.
1
ответ дан 14 December 2019 в 04:40
поделиться

Я бы повторил другие в том, что 1) компилятор работает быстро, и 2 ) "Щелкни и играй" должно быть достаточно простым, чтобы ни один виджет, добавленный к стопке виджетов, не мог превратить ее в незаконную стопку.

Удачи. Я скептически отношусь к тому, что вы можете достичь пункта (2) ни для чего, кроме программ игрушечного уровня.

0
ответ дан 14 December 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: