การสร้าง ตัวแปร Class Enum จาก Database
เริ่มจาก Reference ที่ต้อง Imports กันก่อน
Imports System.CodeDom Imports System.CodeDom.Compiler
ต่อไปเป็นฟังก์ชั่นที่จะใช้ในการสร้าง Code เราต้องอ่าน Database ที่ต้องการจะสร้างเป็นตัวแปร Class หรือ ENUM เอาไว้ เพื่อ loop ในการสร้าง Code เราเริ่มจากการกำหนดตัวแปรที่เป็น CodeProvider ซึ่งจะเป็น VC , C# ก็แล้วแต่กำหนด แล้วก็กำหนดตัวแปรที่เป็น CodeCompileUnit
Dim CodeProvider As New VBCodeProvider Dim CodeComplier As New CodeCompileUnit
หลังจากได้ตัวแปรทั้งสองแล้วเราก็มาเริ่มเขียน ส่วนของ Code ที่ต้องการสร้างขึ้นมาเลย
เริ่มที่ NameSpace ก่อน
Dim CodeNameSpace As New CodeNamespace("MYNameSpace")
แล้วเราก็ Add Namespace ที่เราสร้างเข้าไปใน CodeComplier ของเรา
CodeComplier.Namespaces.Add(CodeNameSpace)
ถ้าต้องการให้มีการ Imports ที่ Code ทำได้โดย CodeNameSpace.Imports.Add(New CodeNamespaceImport("System"))
ต่อไปเราก็สร้าง Class ชื่อ MyClassName
Dim mClass As New CodeTypeDeclaration("MyClassName") mClass.IsClass = True
ต่อไปเป็นการกำหนด Attributes ของ Class เช่นเป็น Private , Public, Shared etc.
mClass.Attributes = MemberAttributes.Public Or MemberAttributes.Static
ถ้าเราต้องการ Add Comment ก็ทำได้ดังนี้ Dim comment As New CodeComment comment.DocComment = True comment.Text = "ทดสอบการสร้าง Class จากโปรแกรม " Dim comment1 As New CodeComment comment1.DocComment = True comment1.Text = "ส่วนของหมายเหตุนะจ๊ะ"
mClass.Comments.Add(New CodeCommentStatement(comment)) mClass.Comments.Add(New CodeCommentStatement(comment1))
ต่อไปก็เป็นการสร้างสมาชิกใน Class อันนี้เราจะสร้าง Property
Dim property1 As New CodeMemberProperty() property1.Name = "StringProperty" property1.Type = New CodeTypeReference("System.String") property1.Attributes = MemberAttributes.Public property1.GetStatements.Add(New CodeMethodReturnStatement(New CodeFieldReferenceExpression(New CodeThisReferenceExpression(), "testStringField"))) property1.SetStatements.Add(New CodeAssignStatement(New CodeFieldReferenceExpression(New CodeThisReferenceExpression(), "testStringField"), New CodePropertySetValueReferenceExpression()))
ซึ่งจะสร้าง Code ให้เราเป็นดังข้างล่าง
' Public Overridable Property StringProperty() As String ' Get ' Return Me.testStringField ' End Get ' Set(ByVal Value As String) ' Me.testStringField = value ' End Set ' End Property
(เราสามารถ Return ค่าคงที่ได้โดยใช้ CodePrimitiveExpression แทน CodeFieldReferenceExpression)
หลังจากนั้นก็ Add Property ที่เราสร้างเข้า Class
mClass.Members.Add(property1)
ต่อไปเป็นการสร้าง Enum
Dim e1 As New CodeTypeDeclaration("Action") e1.Attributes = MemberAttributes.Public e1.IsEnum = True
เราก็จะได้ Enum Action ขึ้นมา ต่อไปเป็นการ Add ค่าเข้าไปใน Enum ซึ้งตรงนี้เราสามารถอ่านค่า จาก Database เพื่อเข้ามาสร้าง Enum ไว้ใช้
For i as int16 = 0 to 100 Dim evalue As New CodeMemberField evalue.Name = "Enum" & i.toString e1.Members.Add(evalue) Next
ต่อไปเราก็ Add Enum ที่สร้างเข้า Class mClass.Members.Add(e1)
แล้วก็ Add Class เข้า Namespace
CodeNameSpace.Types.Add(mClass)
เท่านี้ก็ถือว่าเราสร้าง Code ของ Class ที่มี Property และ Enum อยู่ใน Class สำเร็จ
สุดท้ายก็คือการ Generate Code ทำได้ดังนี้
Dim SourceFile As String = SourceFolder & "TEST.VB" Dim tw As New IndentedTextWriter(New StreamWriter(SourceFile, False), " ") CodeProvider.GenerateCodeFromNamespace(CodeNameSpace, tw, New Compiler.CodeGeneratorOptions) tw.Close()
เราก็จะได้ Code TEST.VB
ผมจะพูดถึงเฉพาะส่วนของ Code ทีใช้ในการสร้าง Class และ Enum ส่วนของการอ่าน Database เพื่อ เอามา Loop สร้าง Class ก็คงไม่ยากนะครับ
Create Date : 09 กรกฎาคม 2553 |
|
1 comments |
Last Update : 9 กรกฎาคม 2553 10:25:55 น. |
Counter : 1382 Pageviews. |
|
|
|