CodeDOM’yi kullanma

CodeDOM, birçok yaygın kaynak kod öğesi türünü temsil eden türler sağlar. Nesne grafı oluşturmak için CodeDOM öğelerini kullanarak kaynak kod modeli oluşturan bir program tasarlayabilirsiniz. Bu nesne grafı, desteklenen bir programlama dili için CodeDOM kod oluşturucu kullanılarak kaynak kod olarak işlenebilir. CodeDOM, kaynak kodu bir ikili derlemede derlemek için de kullanılabilir.

CodeDOM için bazı yaygın kullanımlar şunlardır:

  • Şablonlu kod oluşturma: ASP.NET, XML Web hizmetleri istemci proxy'leri, kod sihirbazları, tasarımcılar veya diğer kod yayma mekanizmaları için kod oluşturma.
  • Dinamik derleme: Tek veya birden çok dilde kod derlemeyi destekleme.

CodeDOM grafiği oluşturma

Ad System.CodeDom alanı, dil söz dizimlerinden bağımsız olarak kaynak kodun mantıksal yapısını temsil eden sınıflar sağlar.

CodeDOM grafiğinin yapısı

CodeDOM grafiğinin yapısı kapsayıcı ağacı gibidir. Her derlenebilir CodeDOM grafiğinin en üstteki veya kök kapsayıcısı bir CodeCompileUnitşeklindedir. Kaynak kod modelinizin her öğesi graftaki bir özelliği CodeObject aracılığıyla grafiğe bağlanmalıdır.

Örnek bir Merhaba Dünya programı için kaynak kod modeli oluşturma

Aşağıdaki izlenecek yol, basit bir Merhaba Dünya uygulamasının kodunu temsil eden codeDOM nesne grafiğinin nasıl derlendiğini gösteren bir örnek sağlar. Bu kod örneğinin tam kaynak kodu için makaleye System.CodeDom.Compiler.CodeDomProvider bakın.

Derleme birimi oluşturma

CodeDOM, derlenecek kaynak kodu modelleyen codeDOM nesne grafiğine başvurabilen adlı CodeCompileUnitbir nesne tanımlar. CodeCompileUnit özniteliklere, ad alanlarına ve derlemelere başvuruları depolamaya yönelik özelliklere sahiptir.

sınıfından CodeDomProvider türetilen CodeDom sağlayıcıları, CodeCompileUnit tarafından başvuruda bulunılan nesne grafını işleyen yöntemler içerir.

Basit bir uygulama için nesne grafı oluşturmak için kaynak kod modelini derlemeniz ve codeCompileUnit'ten buna başvurmanız gerekir.

Bu örnekte gösterildiği gibi söz dizimiyle yeni bir derleme birimi oluşturabilirsiniz:

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

, CodeSnippetCompileUnit kaynak kodun zaten hedef dilde olan ancak başka bir dilde işlenemeyen bir bölümünü içerebilir.

Ad alanı tanımlama

Ad alanını tanımlamak için, uygun oluşturucuyu kullanarak veya Name özelliğini ayarlayarak bir ad oluşturun CodeNamespace ve bu ad için bir ad atayın.

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

Ad alanını içeri aktarma

Ad alanına bir ad alanı içeri aktarma yönergesi eklemek için CodeNamespace.Imports koleksiyonuna içeri aktaracak ad alanını gösteren bir CodeNamespaceImport ekleyin.

Aşağıdaki kod, Adlı samplesCodeNamespace'in Imports koleksiyonuna Sistem ad alanı için bir içeri aktarma ekler:

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

CodeDOM grafiği oluşturan tüm kod öğeleri, doğrudan grafiğin CodeCompileUnit kök nesnesinin özelliklerinden başvurulan öğeler arasında bir dizi başvuru ile ağacın kök öğesi olan öğesine bağlanmalıdır. Kapsayıcı nesnesinden başvuru oluşturmak için bir nesneyi kapsayıcı nesnesinin özelliğine ayarlayın.

Aşağıdaki deyim CodeNamespace'i samples root CodeCompileUnit'in Namespaces koleksiyon özelliğine ekler.

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

Tür tanımlama

CodeDOM kullanarak bir sınıf, yapı, arabirim veya numaralandırma bildirmek için yeni CodeTypeDeclarationbir oluşturun ve buna bir ad atayın. Aşağıdaki örnek, Name özelliğini ayarlamak için bir oluşturucu aşırı yüklemesi kullanarak bunu gösterir:

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

Ad alanına bir tür eklemek için CodeNamespace'in Types koleksiyonuna ad alanına eklenecek türü temsil eden bir ekleyinCodeTypeDeclaration.

Aşağıdaki örnekte adlı bir CodeNamespace'e adlı class1 samplessınıfın nasıl ekleneceği gösterilmektedir:

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

Sınıfa sınıf üyeleri ekleme

Ad alanı, System.CodeDom sınıf üyelerini temsil etmek için kullanılabilecek çeşitli öğeler sağlar. Her sınıf üyesi, bir CodeTypeDeclarationöğesinin Üyeler koleksiyonuna eklenebilir.

Yürütülebilir dosya için kod giriş noktası yöntemi tanımlama

Yürütülebilir bir program için kod oluşturuyorsanız, program yürütmenin başlaması gereken yöntemi temsil eden bir CodeEntryPointMethod oluşturarak bir programın giriş noktasını belirtmeniz gerekir.

Aşağıdaki örnekte, "Merhaba Dünya!" yazdırmak için System.Console.WriteLine'ı çağıran bir CodeMethodInvokeExpression giriş noktası yönteminin nasıl tanımlanacağı gösterilmektedir:

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)

Aşağıdaki deyim, adlı Start giriş noktası yöntemini öğesinin Members koleksiyonuna class1ekler:

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

CodeCompileUnit Şimdi adlandırılmış, compileUnit basit bir Merhaba Dünya programı için CodeDOM grafiğini içerir. CodeDOM grafiğinden kod oluşturma ve derleme hakkında bilgi için bkz . CodeDOM Grafiğinden Kaynak Kodu Oluşturma ve Program Derleme.

CodeDOM grafı oluşturma hakkında daha fazla bilgi

CodeDOM, ortak dil çalışma zamanını destekleyen programlama dillerinde bulunan birçok yaygın kod öğesi türünü destekler. CodeDOM, tüm olası programlama dili özelliklerini temsil eden öğeler sağlamak için tasarlanmamıştır. CodeDOM öğeleriyle kolayca temsil edilemeyen kod, CodeSnippetStatementCodeSnippetTypeMemberveya CodeSnippetCompileUnitiçinde kapsüllenebilirCodeSnippetExpression. Ancak kod parçacıkları CodeDOM tarafından otomatik olarak diğer dillere çevrilemez.

CodeDOM türlerinin her birine ilişkin belgeler için ad alanının başvuru belgelerine System.CodeDom bakın.

Belirli bir kod öğesi türünü temsil eden CodeDOM öğesini bulmak için bkz . CodeDOM Hızlı Başvurusu.