Menggunakan CodeDOM
CodeDOM menyediakan jenis yang mewakili banyak jenis umum dari elemen kode sumber. Anda dapat merancang program yang membuat model kode sumber menggunakan elemen CodeDOM untuk merakit grafik objek. Grafik objek ini dapat dirender sebagai kode sumber menggunakan pembuat kode CodeDOM untuk bahasa pemrograman yang didukung. CodeDOM juga dapat digunakan untuk mengompilasi kode sumber ke dalam rakitan biner.
Beberapa kegunaan umum untuk CodeDOM meliputi:
- Pembuatan kode template: menghasilkan kode untuk ASP.NET, proksi klien layanan Web XML, wizard kode, perancang, atau mekanisme pemancar kode lainnya.
- Kompilasi dinamis: mendukung kompilasi kode dalam satu atau beberapa bahasa.
Membangun grafik CodeDOM
Namespace System.CodeDom menyediakan kelas untuk mewakili struktur logis kode sumber, terlepas dari sintak bahasa.
Struktur grafik CodeDOM
Struktur grafik CodeDOM seperti pohon kontainer. Kontainer paling atas, atau root, dari setiap grafik CodeDOM yang dapat dikompilasi adalah CodeCompileUnit. Setiap elemen model kode sumber Anda harus ditautkan ke dalam grafik melalui properti CodeObject dalam grafik.
Membangun model kode sumber untuk contoh program Halo Dunia
Panduan berikut memberikan contoh cara membuat grafik objek CodeDOM yang mewakili kode untuk aplikasi Halo Dunia sederhana. Untuk kode sumber lengkap untuk contoh kode ini, lihat System.CodeDom.Compiler.CodeDomProvider artikel.
Membuat unit kompilasi
CodeDOM mendefinisikan objek yang disebut CodeCompileUnit, yang dapat mereferensikan grafik objek CodeDOM yang membuat model kode sumber yang akan dikompilasi. CodeCompileUnit memiliki properti untuk menyimpan referensi ke atribut, namespace, dan rakitan.
Penyedia CodeDom yang berasal dari kelas CodeDomProvider berisi metode yang memproses grafik objek yang direferensikan oleh CodeCompileUnit.
Untuk membuat grafik objek aplikasi sederhana, Anda harus merakit model kode sumber dan mereferensikannya dari CodeCompileUnit.
Anda dapat membuat unit kompilasi baru dengan sintaks yang ditunjukkan dalam contoh ini:
CodeCompileUnit^ compileUnit = gcnew CodeCompileUnit();
CodeCompileUnit compileUnit = new CodeCompileUnit();
Dim compileUnit As New CodeCompileUnit()
CodeSnippetCompileUnit Dapat berisi bagian kode sumber yang sudah dalam bahasa target, tetapi tidak dapat dirender ke bahasa lain.
Menentukan namespace layanan
Untuk menentukan namespace, buat CodeNamespace dan tetapkan nama untuk namespace tersebut menggunakan konstruktor yang sesuai atau dengan mengatur properti Nama.
CodeNamespace^ samples = gcnew CodeNamespace("Samples");
CodeNamespace samples = new CodeNamespace("Samples");
Dim samples As New CodeNamespace("Samples")
Mengimpor namespace layanan
Untuk menambahkan perintah impor namespace ke namespace, tambahkan CodeNamespaceImport yang menunjukkan namespace yang akan diimpor ke kumpulan CodeNamespace.Imports.
Kode berikut menambahkan impor untuk namespace sistem ke kumpulan Impor dari CodeNamespace bernama samples
:
samples->Imports->Add(gcnew CodeNamespaceImport("System"));
samples.Imports.Add(new CodeNamespaceImport("System"));
samples.Imports.Add(new CodeNamespaceImport("System"))
Menautkan elemen kode ke dalam grafik objek
Semua elemen kode yang membentuk grafik CodeDOM harus ditautkan ke CodeCompileUnit yang merupakan elemen root pohon dengan serangkaian referensi antar elemen yang direferensikan langsung dari properti objek root grafik. Atur objek ke properti objek kontainer untuk membuat referensi dari objek kontainer.
Pernyataan berikut menambahkan samples
CodeNamespace ke properti kumpulan Namespace dari CodeCompileUnit akar.
compileUnit->Namespaces->Add( samples );
compileUnit.Namespaces.Add( samples );
compileUnit.Namespaces.Add(samples)
Menentukan jenis
Untuk mendeklarasikan kelas, struktur, antarmuka, atau enumerasi menggunakan CodeDOM, buat CodeTypeDeclaration baru, dan beri nama. Contoh berikut menunjukkan jenis menggunakan kelebihan beban konstruktor untuk mengatur properti Nama:
CodeTypeDeclaration^ class1 = gcnew CodeTypeDeclaration("Class1");
CodeTypeDeclaration class1 = new CodeTypeDeclaration("Class1");
Dim class1 As New CodeTypeDeclaration("Class1")
Untuk menambahkan jenis ke namespace, tambahkan CodeTypeDeclaration yang mewakili jenis yang akan ditambahkan ke namespace ke kumpulan Jenis dari CodeNamespace.
Contoh berikut menunjukkan cara menambahkan kelas bernama class1
ke CodeNamespace bernama samples
:
samples->Types->Add(class1);
samples.Types.Add(class1);
samples.Types.Add(class1)
Menambahkan anggota kelas ke kelas
Namespace System.CodeDom menyediakan berbagai elemen yang dapat digunakan untuk mewakili anggota kelas. Setiap anggota kelas dapat ditambahkan ke kumpulan Anggota dari CodeTypeDeclaration.
Tentukan metode titik masuk kode untuk yang dapat dieksekusi
Jika Anda sedang membuat kode untuk program yang dapat dijalankan, Anda perlu menunjukkan titik masuk program dengan membuat CodeEntryPointMethod guna mewakili metode tempat eksekusi program harus dimulai.
Contoh berikut menunjukkan cara menentukan metode titik masuk yang berisi CodeMethodInvokeExpression yang memanggil System.Console.WriteLine untuk mencetak "Halo Dunia!":
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)
Pernyataan berikut menambahkan metode titik masuk bernama Start
ke kumpulan Anggota dari class1
:
class1->Members->Add(start);
class1.Members.Add( start );
class1.Members.Add(start)
Sekarang CodeCompileUnit bernama compileUnit
berisi grafik CodeDOM untuk program Halo Dunia sederhana. Untuk informasi tentang cara membuat dan menyusun kode dari grafik CodeDOM, lihat Membuat Kode Sumber dan Menyusun Program dari Grafik CodeDOM.
Informasi selengkapnya tentang membuat grafik CodeDOM
CodeDOM mendukung banyak jenis elemen kode yang umum ditemukan dalam bahasa pemrograman yang mendukung runtime bahasa umum. CodeDOM tidak dirancang untuk menyediakan elemen guna mewakili semua fitur bahasa pemrograman yang mungkin. Kode yang tidak dapat direpresentasikan dengan mudah dengan elemen CodeDOM dapat dienkapsulasi dalam CodeSnippetExpression, CodeSnippetStatement, CodeSnippetTypeMember, atau CodeSnippetCompileUnit. Namun, cuplikan tidak dapat diterjemahkan ke bahasa lain secara otomatis oleh CodeDOM.
Untuk dokumentasi setiap jenis CodeDOM, lihat dokumentasi referensi untuk namespace System.CodeDom.
Untuk bagan cepat guna menemukan elemen CodeDOM yang mewakili jenis elemen kode tertentu, lihat Referensi Cepat CodeDOM.