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ű samples
CodeNamespace 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"))
Kódelemek csatolása az objektumdiagramhoz
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 samples
CodeNamespace-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.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: