Použití modelu CodeDOM

CodeDOM poskytuje typy, které představují mnoho běžných typů elementů zdrojového kódu. Můžete navrhnout program, který sestaví model zdrojového kódu pomocí elementů CodeDOM k sestavení grafu objektu. Tento objektový graf lze vykreslit jako zdrojový kód pomocí generátoru kódu CodeDOM pro podporovaný programovací jazyk. CodeDOM lze také použít ke kompilaci zdrojového kódu do binárního sestavení.

Mezi běžné použití codeDOM patří:

  • Generování kódu šablony: generování kódu pro ASP.NET, proxy klientských proxy webových služeb XML, průvodce kódem, návrháři nebo jiné mechanismy generování kódu.
  • Dynamická kompilace: podpora kompilace kódu v jednom nebo několika jazycích.

Vytvoření grafu CodeDOM

Obor System.CodeDom názvů poskytuje třídy pro reprezentaci logické struktury zdrojového kódu nezávisle na syntaxi jazyka.

Struktura grafu CodeDOM

Struktura grafu CodeDOM je jako strom kontejnerů. Horní nebo kořenový kontejner každého kompilovatelného grafu CodeDOM je CodeCompileUnit. Každý prvek modelu zdrojového kódu musí být propojený s grafem prostřednictvím vlastnosti CodeObject v grafu.

Vytvoření modelu zdrojového kódu pro ukázkový program Hello World

Následující návod obsahuje příklad vytvoření grafu objektu CodeDOM, který představuje kód pro jednoduchou aplikaci Hello World. Úplný zdrojový kód pro tento příklad kódu najdete v System.CodeDom.Compiler.CodeDomProvider článku.

Vytvoření kompilační jednotky

CodeDOM definuje objekt s názvem CodeCompileUnit, který může odkazovat na objektový graf CodeDOM, který modeluje zdrojový kód ke kompilaci. CodeCompileUnit má vlastnosti pro ukládání odkazů na atributy, obory názvů a sestavení.

Zprostředkovatelé CodeDom odvozené od CodeDomProvider třídy obsahují metody, které zpracovávají objektový graf odkazovaný codeCompileUnit.

Pokud chcete vytvořit objektový graf pro jednoduchou aplikaci, musíte sestavit model zdrojového kódu a odkazovat na něj z CodeCompileUnit.

Novou jednotku kompilace můžete vytvořit pomocí syntaxe demonstrované v tomto příkladu:

CodeCompileUnit^ compileUnit = gcnew CodeCompileUnit();
CodeCompileUnit compileUnit = new CodeCompileUnit();
Dim compileUnit As New CodeCompileUnit()

A CodeSnippetCompileUnit může obsahovat část zdrojového kódu, která už je v cílovém jazyce, ale nelze ji vykreslit do jiného jazyka.

Definování oboru názvů

Chcete-li definovat obor názvů, vytvořte CodeNamespace a přiřaďte název pro něj pomocí příslušného konstruktoru nebo nastavením jeho Vlastnosti Název .

CodeNamespace^ samples = gcnew CodeNamespace("Samples");
CodeNamespace samples = new CodeNamespace("Samples");
Dim samples As New CodeNamespace("Samples")

Import oboru názvů

Pokud chcete přidat direktivu importu oboru názvů do oboru názvů, přidejte CodeNamespaceImport do kolekce CodeNamespace.Imports obor názvů označující obor názvů, který se má importovat.

Následující kód přidá import pro systémový obor názvů do kolekce Imports codeNamespace s názvemsamples:

samples->Imports->Add(gcnew CodeNamespaceImport("System"));
samples.Imports.Add(new CodeNamespaceImport("System"));
samples.Imports.Add(new CodeNamespaceImport("System"))

Všechny prvky kódu, které tvoří graf CodeDOM, musí být propojeny s CodeCompileUnit tím, který je kořenovým prvkem stromu pomocí řady odkazů mezi prvky přímo odkazovanými z vlastností kořenového objektu grafu. Nastavte objekt na vlastnost objektu kontejneru pro navázání odkazu z objektu kontejneru.

Následující příkaz přidá samplesCodeNamespace do vlastnosti kolekce Namespaces kořenového CodeCompileUnit.

compileUnit->Namespaces->Add( samples );
compileUnit.Namespaces.Add( samples );
compileUnit.Namespaces.Add(samples)

Definování typu

Pokud chcete deklarovat třídu, strukturu, rozhraní nebo výčet pomocí CodeDOM, vytvořte novou CodeTypeDeclarationa přiřaďte jí název. Následující příklad ukazuje použití přetížení konstruktoru k nastavení Name vlastnost:

CodeTypeDeclaration^ class1 = gcnew CodeTypeDeclaration("Class1");
CodeTypeDeclaration class1 = new CodeTypeDeclaration("Class1");
Dim class1 As New CodeTypeDeclaration("Class1")

Chcete-li přidat typ do oboru názvů, přidejte CodeTypeDeclaration typ, který chcete přidat do oboru názvů do kolekce Types codeNamespace.

Následující příklad ukazuje, jak přidat třídu pojmenovanou class1do CodeNamespace s názvem samples:

samples->Types->Add(class1);
samples.Types.Add(class1);
samples.Types.Add(class1)

Přidání členů třídy do třídy

Obor System.CodeDom názvů poskytuje řadu prvků, které lze použít k reprezentaci členů třídy. Každý člen třídy lze přidat do kolekce Členové třídy CodeTypeDeclaration.

Definování metody vstupního bodu kódu pro spustitelný soubor

Pokud vytváříte kód pro spustitelný program, je nutné označit vstupní bod programu vytvořením představující CodeEntryPointMethod metodu, při které má spuštění programu začít.

Následující příklad ukazuje, jak definovat metodu vstupního bodu, která obsahuje CodeMethodInvokeExpression volání System.Console.WriteLine k tisku "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)

Následující příkaz přidá metodu vstupního bodu pojmenovanou Startdo kolekce Members kolekce class1:

class1->Members->Add(start);
class1.Members.Add( start );
class1.Members.Add(start)

Pojmenovaný compileUnit kód CodeCompileUnit teď obsahuje graf CodeDOM pro jednoduchý program Hello World. Informace o generování a kompilaci kódu z grafu CodeDOM najdete v tématu Generování zdrojového kódu a kompilace programu z grafu CodeDOM.

Další informace o vytváření grafu CodeDOM

CodeDOM podporuje mnoho běžných typů prvků kódu nalezených v programovacích jazycích, které podporují common language runtime. CodeDOM nebyl navržen tak, aby poskytoval prvky představující všechny možné funkce programovacího jazyka. Kód, který nelze snadno reprezentovat pomocí elementů CodeDOM lze zapouzdřením v objektu CodeSnippetExpression, a CodeSnippetStatement, a CodeSnippetTypeMember, nebo .CodeSnippetCompileUnit Fragmenty kódu ale nelze automaticky přeložit do jiných jazyků.

Dokumentaci ke každému z typů CodeDOM najdete v referenční dokumentaci k System.CodeDom oboru názvů.

Rychlý graf k vyhledání elementu CodeDOM, který představuje konkrétní typ elementu kódu, naleznete v rychlé referenční dokumentaci CodeDOM.