在VisualBasic6.0類的技術與應用(上)(以下簡稱上文)中,我們討論了類的理論、類的創建和類的方法的編程實踐,實際上,類之所以能夠在軟體工程中廣泛應用,最主要的一點是它可以非常方便的封裝許多程式設計所需的屬性,這不僅使程式設計師在一定程度上克服控制項(ocx)和連結庫(dll)設計和調試中的複雜性,而且能夠提高程式碼的簡潔和高效性——本文將討論完整的類別的編程,包括方法、屬性和基本事件。
(一)類的屬性的特徵與定義;
類似於標準控制項的屬性,類別的屬性允許使用者在指定的資料範圍內進行賦值,這些值被類別內的各個程式碼部分所共用。屬性的取得和傳遞需要經過PRopertyLet和PropertyGet語句進行編程,當然,我們首先需要在類別中進行全域或模組級的對應變數定義。
(二)事件的屬性和基本定義;
和窗體的事件類似,類別也有兩個基本的事件,Class_Initialize(類別載入時觸發)和Class_Terminate(類別卸載時觸發),這兩個事件都是private的。實際上,我們完全可以忽略這兩個事件——只要你記得完善類別的方法和屬性。
類別同樣可以定義自己的事件,它和方法的程式編寫格式類似,只不過需要WithEvents關鍵字進行參數聲明,而且事件不能有任何命名參數或者可選參數,它也沒有回傳值。
實際上,結構良好的方法和屬性完全可以取代結構複雜的類別的事件。
(三)類的方法、事件、屬性的程式實例;
本程式的設計目的是,透過類別控制窗體中文字方塊的內容的全部大寫、小寫和逆向排序轉換。
為了方便程式碼的書寫和調用,我在類別中引用了枚舉的程式方法。
以下程式碼在類別Class1:
OptionExplicit
PrivateWithEventsmyTXTAsTextBox
'方法的參數接口
PublicEnumsTYLE
Lcaseit'小寫屬性
Lbigit'大寫屬性
Nlogoit'逆向排序屬性
EndEnum
'自訂枚舉,用來實現屬性的自動賦值
PrivatemvarBiaozhiAssTYLE
'實現枚舉常量的連接
PublicFunctiondONE()AsString'
'DONE方法用來根據指定的枚舉屬性,對
'窗體文字方塊進行對應的字元轉換操作
'並且傳回轉換後的字串
IfmvarBiaozhi=NlogoitThen
dONE=StrReverse(myTXT)
'逆向排序
ElseIfmvarBiaozhi=LcaseitThen
dONE=LCase(myTXT)
'強制小寫轉化
Else
dONE=UCase(myTXT)
'強制大寫轉化
EndIf
EndFunction
'DONE方法結束
PublicPropertyLetBiaozhi(ByValvDataAssTYLE)
'獲得屬性的被賦的值
mvarBiaozhi=vData
EndProperty
PublicPropertyGetBiaozhi()AssTYLE
'傳遞屬性值到類別中
SetBiaozhi=mvarBiaozhi
EndProperty
PublicSubAttach(itTEXTAsTextBox)
'連接類別的方法
SetmyTXT=itTEXT
EndSub
PrivateSubClass_Initialize()
'本事件在類倍加載時激活
MsgBox"你好!本程式向您展示使用類別的方法、屬性、事件進行程式設計的技術!"
EndSub
PrivateSubClass_Terminate()
'本事件在類別被卸載時激活
MsgBox"你好!記得在Class_Terminate填入物件撤銷後的程式碼!"
EndSub
'類別的程式碼全部結束
(四)窗體程式碼的引用程式;
在窗體FORM1中加入文字控制項TEXT1、下拉清單控制項COMBO1、指令按鈕COMMAND1(CAPTION="開始轉換"),調整三個控製到適當位置。
DimmyTAsNewClass1
'類的引用
PrivateSubForm_Load()
Combo1.Clear
Combo1.AddItem"字串大寫轉換"
Combo1.AddItem"字串小寫轉換"
Combo1.AddItem"字串逆向排序"
Combo1.ListIndex=0
'在列錶框中新增屬性選項
EndSub
PrivateSubCommand1_Click()
'當命令按鈕按下時啟動類
myT.AttachText1
'方法參數聯接
SelectCaseCombo1.ListIndex
Case0
myT.Biaozhi=Lbigit
Case1
myT.Biaozhi=Lcaseit
Case2
myT.Biaozhi=Nlogoit
EndSelect
'根據列錶框的選擇,給類別的Biaozhi屬性賦值
'注意,在程式設計環境中,上述屬性值自動添加
Text1.Text=myT.dONE
'傳回排序結束後的字串
EndSub
PrivateSubForm_Unload(CancelAsInteger)
SetmyT=Nothing
End
'良好的程式設計習慣
EndSub
怎麼樣,我們的程式碼看起來如此的簡潔,這種感覺就像是在使用一個控件,不僅可以隨心所欲的調用,而且方便的使用了vb的自動提示功能。
(五)關於類的程式設計技術的總結;
嚴格的說,類別是vb編程中的一個相當有用的技術,同樣也是學習和掌握中的難點,類在大型軟體工程中應用是非常廣泛和卓有成效的,但是,在小型軟體開發中,為了提高軟體的效率和程式碼的清晰度,應該避免使用較多的類別模組,控制和聯接庫,取代以標準模組。
本文範例的程式碼比較簡單,卻涵蓋了關於模組程式設計技術的方方面面,希望初學者能有所借鑒,也希望程式設計師能共同探討。我們應該相信,無論多麼複雜的高樓大廈都是由普普通通的方磚堆砌而成的,同樣,無論所麼複雜的軟體工程都是由基本的程序語句所構成的,程式設計愛好者、程式設計師和分析員的差別只是在於,用同樣的程式語句所建構的程式的不同而已。 ->