Megosztás a következőn keresztül:


A CodeDOM használata

A CodeDOM számos gyakori forráskód-elemet ábrázoló típusokat tartalmaz. Létrehozhat egy olyan programot, amely CodeDOM-elemekkel készít forráskódmodellt egy objektumgráf összeállításához. Ez az objektumdiagram egy támogatott programozási nyelv CodeDOM-kódgenerátorával megjeleníthető forráskódként. A CodeDOM a forráskód bináris szerelvénybe való fordítására is használható.

A CodeDOM néhány gyakori felhasználási módja:

  • Sablonalapú kódgenerálás: kód létrehozása ASP.NET, XML Web Services-ügyfélproxykhoz, kódvarázslókhoz, tervezőkhöz vagy más kódkibocsátó mechanizmusokhoz.
  • Dinamikus fordítás: kódfordítás támogatása egy vagy több nyelven.

CodeDOM-diagram létrehozása

A System.CodeDom névtér osztályokat biztosít a forráskód logikai szerkezetének a nyelvi szintaxistól függetlenül történő ábrázoláshoz.

A CodeDOM-gráf felépítése

A CodeDOM-gráf szerkezete olyan, mint a tárolók fája. Az egyes összeállítható CodeDOM-diagramok legfelső vagy legfelső szintű tárolója egy CodeCompileUnit. A forráskódmodell minden elemét a gráf egy tulajdonságán CodeObject keresztül kell csatolni a gráfhoz.

Forráskódmodell létrehozása minta "Helló világ!" alkalmazás programhoz

Az alábbi útmutató egy egyszerű "Helló világ!" alkalmazás-alkalmazás kódját képviselő CodeDOM objektumgráf készítésére mutat be példát. A kódhoz tartozó teljes forráskódért tekintse meg a System.CodeDom.Compiler.CodeDomProvider cikket.

Fordítási egység létrehozása

A CodeDOM egy úgynevezett objektumot CodeCompileUnithatároz meg, amely hivatkozhat egy CodeDOM objektumgráfra, amely a forráskódot lefordítani tudja. A CodeCompileUnit attribútumokra, névterekre és szerelvényekre mutató hivatkozások tárolására alkalmas tulajdonságokkal rendelkezik.

Az osztályból CodeDomProvider származó CodeDom-szolgáltatók olyan metódusokat tartalmaznak, amelyek feldolgozzák a CodeCompileUnit által hivatkozott objektumgráfot.

Egy egyszerű alkalmazás objektumgráfjának létrehozásához össze kell állítania a forráskódmodellt, és egy CodeCompileUnitból kell hivatkoznia rá.

Létrehozhat egy új fordítási egységet az alábbi példában bemutatott szintaxissal:

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

A CodeSnippetCompileUnit forráskód olyan szakaszát is tartalmazhatja, amely már szerepel a célnyelven, de nem jeleníthető meg más nyelven.

Névtér definiálása

Névtér definiálásához hozzon létre egy CodeNamespace nevet, és rendeljen hozzá egy nevet a megfelelő konstruktor használatával vagy a Name tulajdonság beállításával.

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

Névtér importálása

Ha névtérimportálási irányelvet szeretne hozzáadni a névtérhez, adjon hozzá egy CodeNamespaceImport olyan nevet, amely a CodeNamespace.Import gyűjteménybe importálandó névteret jelzi.

A következő kód egy importálást ad hozzá a rendszernévtérhez a Következő nevű samplesCodeNamespace Importálás gyűjteményéhez:

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

A CodeDOM-gráfot alkotó kódelemeket a CodeCompileUnit gráf gyökérobjektumának tulajdonságaiból közvetlenül hivatkozott elemek közötti hivatkozássorozattal kell összekapcsolni a fa gyökérelemével. Állítson be egy objektumot egy tárolóobjektum tulajdonságára, és hozzon létre egy hivatkozást a tárolóobjektumból.

Az alábbi utasítás hozzáadja a samplesCodeNamespace-et a CodeCompileUnit gyökértartomány névtereinek gyűjteménytulajdonságához.

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

Típus definiálása

Ha osztályt, struktúrát, felületet vagy számbavételt szeretne deklarálni a CodeDOM használatával, hozzon létre egy újat CodeTypeDeclaration, és rendeljen hozzá egy nevet. Az alábbi példa ezt egy konstruktor túlterhelésével szemlélteti a Name tulajdonság beállításához:

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

Ha típust szeretne hozzáadni egy névtérhez, adjon hozzá egy CodeTypeDeclaration olyan típust, amely a névtérhez hozzáadandó típust jelöli a CodeNamespace Típusgyűjteményéhez.

Az alábbi példa bemutatja, hogyan vehet fel egy osztályt class1 egy CodeNamespace névvel:samples

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

Osztálytagok hozzáadása egy osztályhoz

A System.CodeDom névtér számos olyan elemet tartalmaz, amelyek az osztálytagok ábrázolására használhatók. Minden osztálytag hozzáadható a tagok gyűjteményéhez CodeTypeDeclaration.

Kódbeviteli pont metódusának definiálása végrehajtható fájlhoz

Ha egy végrehajtható program kódját készíti, a program belépési pontját úgy kell megadnia, hogy létrehoz egy olyan metódust CodeEntryPointMethod , amelyen a program végrehajtásának meg kell kezdődnie.

Az alábbi példa bemutatja, hogyan definiálhat olyan belépésipont-metódustCodeMethodInvokeExpression, amely a System.Console.WriteLine metódust hívja meg a ""Helló világ!" alkalmazás!" nyomtatásához:

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)

Az alábbi utasítás hozzáadja a belépési pont metódusát Start a következő tagok gyűjteményéhez class1:

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

Most a CodeCompileUnit név egy compileUnit egyszerű "Helló világ!" alkalmazás program CodeDOM-gráfját tartalmazza. A kód CodeDOM-gráfból való generálásával és fordításával kapcsolatos információkért lásd : Forráskód létrehozása és program összeállítása CodeDOM Graph-ból.

További információ a CodeDOM-diagramok készítéséről

A CodeDOM támogatja a közös nyelvi futtatókörnyezetet támogató programozási nyelvekben található számos gyakori kódelemet. A CodeDOM nem úgy lett kialakítva, hogy olyan elemeket biztosítson, amelyek az összes lehetséges programozási nyelvi funkciót képviselik. A CodeDOM-elemekkel nem egyszerűen ábrázolható kód beágyazható egy CodeSnippetExpression, egy CodeSnippetStatement, egy CodeSnippetTypeMembervagy egy CodeSnippetCompileUnit. A kódrészleteket azonban a CodeDOM nem tudja automatikusan lefordítani más nyelvekre.

Az egyes CodeDOM-típusok dokumentációját a névtér referenciadokumentációjában System.CodeDom találja.

Ha egy adott kódelemtípust képviselő CodeDOM-elemet szeretne megkeresni egy gyorsdiagramon, tekintse meg a CodeDOM gyorshivatkozást.