Sdílet prostřednictvím


Použijte 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í šablonového kódu: generování kódu pro ASP.NET, klientské proxy webových služeb XML, průvodce kódem, návrháře 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. A CodeCompileUnit obsahuje vlastnosti pro ukládání odkazů na atributy, obory názvů a sestavení.

Zprostředkovatelé CodeDom odvození od třídy CodeDomProvider obsahují metody, které zpracovávají objektový graf, na který odkazuje 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.

Definujte obor 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 Name vlastnosti.

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

Importovat jmenný prostor

Pokud chcete přidat direktivu importu pro obor názvů, přidejte CodeNamespaceImport, který označuje obor názvů k importování, do kolekce CodeNamespace.Imports.

Následující kód přidá import oboru názvů System do kolekce Imports objektu s názvem CodeNamespacesamples.

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, jak pomocí přetížení konstruktoru nastavit vlastnost Name.

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 Types kolekce CodeNamespace.

Následující příklad ukazuje, jak přidat třídu pojmenovanou class1 do 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 Members kolekce .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 pro vypsání "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 StartMembers do kolekce class1:

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

Nyní CodeCompileUnit, pojmenovaný compileUnit, 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řit v objektu CodeSnippetExpression, CodeSnippetStatement, CodeSnippetTypeMember nebo CodeSnippetCompileUnit. Fragmenty kódu ale nelze automaticky překládat do jiných jazyků pomocí CodeDOM.

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.