Обучение
Модуль
Начало работы с классами и объектами в C# - Training
Узнайте, как создавать классы и создавать экземпляры объектов, которые предоставляют инкапсулированные данные поля с помощью определений классов, конструкторов и оператора new.
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
CodeDOM содержит типы, представляющие многие общие типы элементов исходного кода. Вы можете разработать программу, которая будет строить модель исходного кода, используя элементы CodeDOM для создания графа объектов. Этот граф объектов может быть воспроизведен в виде исходного кода с помощью генератора кода CodeDOM для поддерживаемого языка программирования. CodeDOM можно также использовать для компиляции исходного кода в двоичную сборку.
Ниже приведены некоторые примеры применения CodeDOM.
Пространство имен System.CodeDom предоставляет классы для представления логической структуры исходного кода, независимой от синтаксиса языка.
Структура графа CodeDOM представляет собой дерево контейнеров. Самым верхним (корневым) контейнером каждого графа CodeDOM, доступного для компиляции, является CodeCompileUnit. Каждый элемент модели исходного кода должен быть связан с графом посредством свойства CodeObject в графе.
Ниже приведено пошаговое руководство по построению графа объектов CodeDOM, представляющего код для простого приложения "Hello, World". Полный исходный код для этого примера кода см. в System.CodeDom.Compiler.CodeDomProvider статье.
CodeDOM определяет объект с именем CodeCompileUnit, который может ссылаться на граф объектов CodeDOM, моделирующий компилируемый исходный код. В свойствах объекта CodeCompileUnit могут храниться ссылки на атрибуты, пространства имен и сборки.
Поставщики CodeDom, производные от класса CodeDomProvider, содержат методы, которые обрабатывают граф объектов, на который ссылается CodeCompileUnit.
Чтобы создать граф объектов для простого приложения, необходимо собрать модель исходного кода и сослаться на нее из CodeCompileUnit.
В следующем примере приведен синтаксис для создания модуля компиляции.
CodeCompileUnit^ compileUnit = gcnew CodeCompileUnit();
CodeCompileUnit compileUnit = new CodeCompileUnit();
Dim compileUnit As New CodeCompileUnit()
Может CodeSnippetCompileUnit содержать раздел исходного кода, который уже находится на целевом языке, но не может быть отображен на другом языке.
Чтобы определить пространство имен, необходимо создать объект CodeNamespace, а затем присвоить ему имя, используя подходящий конструктор или установив значение свойства Name.
CodeNamespace^ samples = gcnew CodeNamespace("Samples");
CodeNamespace samples = new CodeNamespace("Samples");
Dim samples As New CodeNamespace("Samples")
Чтобы добавить в пространство имен директиву импорта пространства имен, добавьте CodeNamespaceImport, который указывает пространство имен, которое следует импортировать в коллекцию CodeNamespace.Imports.
В следующем фрагменте кода пространство имен System импортируется в коллекцию Imports объекта CodeNamespace с именем samples
:
samples->Imports->Add(gcnew CodeNamespaceImport("System"));
samples.Imports.Add(new CodeNamespaceImport("System"));
samples.Imports.Add(new CodeNamespaceImport("System"))
Все элементы кода, образующие граф CodeDOM, должны быть связаны с объектом CodeCompileUnit, являющимся корневым элементом дерева, последовательностью ссылок между элементами, на которые имеются прямые ссылки из свойств корневого объекта графа. Чтобы задать ссылку из объекта-контейнера, необходимо присвоить объект свойству объекта-контейнера.
Приведенный ниже оператор добавляет samples
CodeNamespace в свойство коллекции Namespaces корневого объекта CodeCompileUnit.
compileUnit->Namespaces->Add( samples );
compileUnit.Namespaces.Add( samples );
compileUnit.Namespaces.Add(samples)
Чтобы объявить класс, структуру, интерфейс или перечисление с помощью CodeDOM, создайте объявление CodeTypeDeclaration и присвойте ему имя. В приведенном ниже примере демонстрируется использование перегрузки конструктора для задания значения свойства Name.
CodeTypeDeclaration^ class1 = gcnew CodeTypeDeclaration("Class1");
CodeTypeDeclaration class1 = new CodeTypeDeclaration("Class1");
Dim class1 As New CodeTypeDeclaration("Class1")
Чтобы добавить тип в пространство имен, добавьте объект CodeTypeDeclaration, представляющий тип, который следует добавить в коллекцию Types пространства имен CodeNamespace.
В следующем примере демонстрируется добавление класса class1
в пространство имен CodeNamespace с именем samples
:
samples->Types->Add(class1);
samples.Types.Add(class1);
samples.Types.Add(class1)
Пространство имен System.CodeDom предоставляет различные элементы, которые можно использовать для представления членов класса. Каждый элемент класса может быть добавлен в коллекцию Members объекта CodeTypeDeclaration.
В случае сборки кода исполняемой программы необходимо указать точку входа в программу, создав объект CodeEntryPointMethod для представления метода, с которого должно начинаться выполнение программы.
В следующем примере показано, как определить метод точки входа, который содержит объект CodeMethodInvokeExpression, вызывающий System.Console.WriteLine для вывода текста "Hello World!":
CodeEntryPointMethod^ start = gcnew CodeEntryPointMethod();
CodeMethodInvokeExpression^ cs1 = gcnew CodeMethodInvokeExpression(
gcnew CodeTypeReferenceExpression("System.Console"),
"WriteLine", gcnew CodePrimitiveExpression("Hello World!"));
start->Statements->Add(cs1);
CodeEntryPointMethod start = new CodeEntryPointMethod();
CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(
new CodeTypeReferenceExpression("System.Console"),
"WriteLine", new CodePrimitiveExpression("Hello World!"));
start.Statements.Add(cs1);
Dim start As New CodeEntryPointMethod()
Dim cs1 As New CodeMethodInvokeExpression( _
New CodeTypeReferenceExpression("System.Console"), _
"WriteLine", new CodePrimitiveExpression("Hello World!"))
start.Statements.Add(cs1)
Приведенный ниже оператор добавляет метод точки входа Start
в коллекцию Members класса class1
.
class1->Members->Add(start);
class1.Members.Add( start );
class1.Members.Add(start)
Теперь объект CodeCompileUnit с именем compileUnit
содержит граф CodeDOM для простой программы "Hello World". Сведения о создании и компиляции кода на основе графа CodeDOM см. в разделе Создание исходного кода и компиляция программы из графа CodeDOM.
CodeDOM поддерживает многие общие типы элементов кода, которые встречаются в языках программирования, поддерживающих среду CLR. Но CodeDOM не предусматривает предоставление элементов для представления всех возможных функций языков программирования. Код, который не может быть без труда представлен элементами CodeDOM, можно инкапсулировать в объекты CodeSnippetExpression, CodeSnippetStatement, CodeSnippetTypeMember или CodeSnippetCompileUnit. Но фрагменты кода невозможно автоматически переводить с помощью CodeDOM на другие языки.
Сведения о каждом типе CodeDOM см. в справочной документации по пространству имен System.CodeDom.
Быстро найти элемент CodeDOM, представляющий определенный тип элемента кода, можно в разделе Краткий справочник по CodeDOM.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Обучение
Модуль
Начало работы с классами и объектами в C# - Training
Узнайте, как создавать классы и создавать экземпляры объектов, которые предоставляют инкапсулированные данные поля с помощью определений классов, конструкторов и оператора new.
Документация
Динамическое создание и компиляция исходного кода - .NET Framework
Скомпилируйте и создайте динамический исходный код в .NET с помощью Code Document Object Model (CodeDOM). Элементы CodeDOM связаны друг с другом для формирования графа CodeDOM.
Практическое руководство. Создание класса с помощью CodeDOM - .NET Framework
Изучите подробный пример, в котором объясняется, как создать класс с помощью Code Document Object Model (CodeDOM).
Создание и компиляция исходного кода из графа CodeDOM - .NET Framework
Создавайте и компилируйте исходный код из графа CodeDOM в .NET. Используйте поставщик кода CodeDOM для создания исходного кода и компиляции сборок.