DLR: помещать объекты операторов и объявлений в объекты, подобные CodeCompileUnit или CodeCompileUnit - PullRequest
2 голосов
/ 05 мая 2019

IronRuby и IronPython имеют пользовательские встроенные модули, стандартные модули, и вы можете писать код прямо из рук (непосредственно используя выражения и объявления в коде) вместо использования пространств имен и классов, как в C # и VB.NET.

Я пытаюсь использовать CodeCompileUnit, но могу найти только свойства Namespaces, AssemblyCustomAttributes, StartDirectives, EndDirectives и ReferencedAssemblies.Никаких других вещей, даже классов (вы можете поместить классы без пространств имен в C # и VB.NET).

Я пытаюсь найти способ добавить такие вещи, как объявление переменных, методы и выражения вCodeCompileUnit вместо пространств имен и только директив.

Как этого добиться?

1 Ответ

1 голос
/ 10 мая 2019

System.CodeDOM - это система генерации кода, которая была разработана для целевых языковых функций, которые являются общими для многих языков .NET, в частности C # и VB.NET. Он не был разработан для поддержки специальностей любого языка .NET.

Даже если вам разрешено помещать операторы в качестве сущностей верхнего уровня в IronPython или IronRuby, вы не можете делать это в C # или VB.NET, и, следовательно, это не поддерживается System.CodeDOM.

Обратите внимание, что разработка System.CodeDOM также практически прекратилась после .NET 2.0. Следовательно, эта модель кода не поддерживает также более поздние синтаксические возможности C # или VB.NET, такие как выражения-синтаксис, лямбда-выражения или async / await. По моему впечатлению, System.CodeDOM был изначально изобретен, чтобы сделать возможными такие вещи, как конструктор WinForms. В таких приложениях не очень важно охватывать все языковые функции всех языков, а нужно только охватывать общие черты, чтобы можно было генерировать один и тот же код на нескольких языках одновременно. Поскольку все языки .NET должны поддерживать CLI, общие черты также включают в себя такие вещи, как события, которые несколько специфичны (например, Java их не знает).

Редактировать: И поэтому не ожидайте, что System.CodeDOM охватывает все языковые функции всех языков, ожидайте, что он будет поддерживать только достаточно всех языков для генерации кода для него.

...