對程式設計師和程式設計愛好者來說,VB中類別的技術是學習中的一個困難,在大型軟體的開發過程中,模組(Moudle)、控制項(Activeocx)、連結庫(Activedll)和類別(Classmoudle)構成了系統化、高效的軟體工程,而類別的技術是控制和連結庫技術的基礎,因此掌握類別的理論和程式設計方法是非常有意義的。
(一)類別的基本定義與應用概述;
類別是包含了方法、屬性、資料成員的高階程式碼模組,它既在模組的範疇之內,又是一個沒有圖形介面的Activeocx,程式設計師可以像使用控制項一樣使用它,但卻不能看到它,值得注意的是,類別是不能繼承的。
類別能夠使我們有效率的完成對某一個或某幾個特定的物件的複雜操作,而物件的動作就是類別的方法,而物件的屬性就是類別的屬性過程。相對而言,如果程式設計的物件是一組事物,那麼,我們採用標準模組的方式是非常合適的,在下列兩種情況下,應該使用類別進行程式碼處理:
(1)創造大量性質相近的物件;
(2)提高程式碼的封裝性。
類別的建立非常簡單,在進行程式碼編寫的時候,在「工程」選單中選擇「新增類別模組」項目,就可以加入一個空白的類別。
類別檔案一般以.cls作為副檔名保存。
(二)類的方法的實作;
類別的方法類似於動態連結庫的介面函數,它能夠接受其他窗體程式碼的指定類型參數,並且傳遞到類別中。一般來說類別的方法是能夠指定是否有回傳值的。它在類別中通常是一個public過程。請看下面的程式碼範例,它使一個密碼框拒絕非字母的輸入:
(1)類cls的程式碼;
OptionExplicit'變數檢查
PRivateWithEventsmytxtAsTextBox
'本類別中的方法接受並控制一個text密碼框
DimisNUMAsBoolean
'類別的模組級變數
PublicSubAttach(itTEXTAsTextBox)
'接受外部變數到mytxt中
Setmytxt=itTEXT
EndSub
PrivateSubmytxt_KeyUp(KeyCodeAsInteger,ShiftAsInteger)
isNUM=(KeyCode>=65)And(KeyCode<=90)
'測試密碼框的鍵盤輸入是否為英文字母
IfisNUM=FalseThen
Beep
mytxt.Text=""
'如果輸入不是英文字母則響鈴並且清空密碼框內容
MsgBox"非法字元輸入!"
EndIf
Debug.Printmytxt.Text
'調試輸出密碼框內容
EndSub
'類的代碼結束
(2)類的引用;
已經編寫完成的類別可以經過兩種格式進行引用,第一種方式:Private(public或dim)myCLS(指定的類別名稱)AsNewcls(編寫完成的類別名稱);第二種方式較多用於程式編寫風格較「老」的程式設計師:首先在窗體程式碼中進行模組級聲明——DimmyCLSAscls,然後在具體程式碼過程中進行具體定義——Setmycls=Newcls。這兩種方式的效率和程式碼的簡潔性方面可能會有所差別,但在筆者的程式設計實踐中,並沒有什麼特別的感覺,不過我較多使用第一種方式,因為它書寫起來更加方便。另外,在程式碼結束的時候,使用SetmyCLS=Nothing來取消類別的資源佔用是一種非常好的程式設計習慣。
在窗體form1中(窗體有一個密碼框控制項text1,passworldchar="*")加入以下程式碼:
OptionExplicit
PrivatemyCLSAsNewcls
'引用cls
PrivateSubForm_Load()
myCLS.AttachText1
'啟動類別
EndSub
'在程式碼結束時記得釋放資源
PrivateSubForm_Unload(CancelAsInteger)
SetmyCLS=Nothing
End
EndSub
本文程式碼展示了類別的方法的程式碼編寫過程和呼叫方式(儘管它和類別的事件非常相似),它的效果是,如果密碼框中被輸入了非字母,則係統振鈴,並刪除密碼框中的原來的資料-在一定程度上保護密碼。
類別的方法可以不需要任何參數,這一點類似一個public的函數或過程,它也是類別中使用最廣泛的。在下一篇文章中我將討論,如何使用類別的屬性、事件和方法進行綜合程式設計。 (未完待續)
->