Group Blog
 
<<
กรกฏาคม 2553
 
 123
45678910
11121314151617
18192021222324
25262728293031
 
9 กรกฏาคม 2553
 
All Blogs
 

การสร้าง ตัวแปร 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.

 

 

โดย: หาแฟนตัวเป็นเกลียว 9 กรกฎาคม 2553 10:37:11 น.  

ชื่อ :
Comment :
  *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 


StockRider
Location :


[ดู Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 1 คน [?]




Friends' blogs
[Add StockRider's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.