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"))
Propojení prvků kódu do grafu objektů
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á samples
CodeNamespace 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 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 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 Start
do 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.