資源描述:
《VB類模塊和標(biāo)準(zhǔn)模塊使用和區(qū)別.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、類模塊和標(biāo)準(zhǔn)模塊類模塊和標(biāo)準(zhǔn)模塊的不同點(diǎn)在于存儲數(shù)據(jù)方法的不同。標(biāo)準(zhǔn)模塊的數(shù)據(jù)只有一個(gè)備份。這意味著標(biāo)準(zhǔn)模塊中一個(gè)公共變量的值改變以后,在后面的程序中再讀取該變量時(shí),它將得到同一個(gè)值。而類模塊的數(shù)據(jù),是相對于類實(shí)例(也就是,由類創(chuàng)建的每一對象)而獨(dú)立存在的。
同樣的,標(biāo)準(zhǔn)模塊中的數(shù)據(jù)在程序作用域內(nèi)存在,也就是說,它存在于程序的存活期中;而類實(shí)例中的數(shù)據(jù)只存在于對象的存活期,它隨對象的創(chuàng)建而創(chuàng)建,隨對象的撤消而消失。
最后,當(dāng)變量在標(biāo)準(zhǔn)模塊中聲明為Public時(shí),則它在工程中任何地方都是可見的;而類模塊中的Public變量,只有當(dāng)對象變量含有對某一
2、類實(shí)例的引用時(shí)才能訪問。
上面的比較,同樣適用于標(biāo)準(zhǔn)模塊和類模塊中的公共過程,用下面的例子可以說明。新建一個(gè)工程,并在“工程”菜單中個(gè)添加一個(gè)標(biāo)準(zhǔn)模塊和一個(gè)類模塊,然后運(yùn)行以下的代碼:
把下面的代碼放在?Class1?中:
'下面是?Class1?對象的一個(gè)屬性。
Public?Comment?As?String
'下面是?Class1?對象的一個(gè)方法。
Public?Sub?ShowComment()
???MsgBox?Comment,?,?gstrVisibleEverywhere
End?Sub
把下面的代碼放在?Module1?中:
3、'標(biāo)準(zhǔn)模塊中的代碼是全局的。
Public?gstrVisibleEverywhere?As?String
Public?Sub?CallableAnywhere(ByVal?c1?As?Class1)
???'下行改變一個(gè)全局變量,這是一個(gè)Class1實(shí)例的(屬性)
???'只有傳遞給該過程的個(gè)別對象才受到影
????c1.Comment?=?"Touched?by?a?global?function."
End?Sub
把兩個(gè)命令按鈕放在?Form1?上,并在?Form1?中添加以下的代碼:
Private?mc1First?As?Class
4、1
Private?mc1Second?As?Class1
Private?Sub?Form_Load()
???'創(chuàng)建兩個(gè)?Class1?類的實(shí)例。
???Set?mc1First?=?New?Class1
???Set?mc1Second?=?New?Class1
???gstrVisibleEverywhere?=?"Global?string?data"
End?Sub
Private?Sub?Command1_Click()
???Call?CallableAnywhere(mc1First)
???mc1First.ShowComme
5、nt
End?Sub
Private?Sub?Command2_Click()
???mc1Second.ShowComment
End?Sub
按F5鍵,運(yùn)行該工程。當(dāng)Form1加載時(shí),它創(chuàng)建兩個(gè)Class1類實(shí)例,每個(gè)實(shí)例有自己的數(shù)據(jù)。同時(shí),F(xiàn)orm1設(shè)置了下面全局變量gstrVisibleEverywhere的值。
按下Command1,調(diào)用全局過程并傳遞引用給第一個(gè)Class1對象。全局過程設(shè)置Comment屬性,然后Command1調(diào)用ShowComment方法顯示該對象的數(shù)據(jù)。
正如圖1所示,結(jié)果信息框演示了全局過程CallableA
6、nywhere如何設(shè)置對象的Comment屬性,而且全局字符串在Class1內(nèi)部是可見的。
圖1第一個(gè)Class1對象的信息框
按下Command2,調(diào)用第二個(gè)Class1類實(shí)例的ShowComment方法。
如圖?9.7?所示,兩個(gè)對象都訪問了全局字符串變量;然而,第二個(gè)對象的Comment屬性是空的,因?yàn)閷θ诌^程CallableAnywhere的調(diào)用只改變第一個(gè)對象的Comment屬性。
圖2第二個(gè)Class1對象的信息框
重點(diǎn):要避免類的代碼依賴于全局變量,也就是標(biāo)準(zhǔn)模塊中的公共變量。一個(gè)類的許多實(shí)例可以同時(shí)存在,所有這些對象在程序中
7、共享全局?jǐn)?shù)據(jù)。
在類模塊代碼中使用全局變量也違背了面向?qū)ο蠓庋b的編程原則,因?yàn)橛蛇@樣的類所創(chuàng)建的對象并沒有包含它們的所有數(shù)據(jù)。
靜態(tài)類數(shù)據(jù)
有時(shí),希望由一個(gè)類模塊所創(chuàng)建的一些對象共享某個(gè)數(shù)據(jù)項(xiàng)。這就是所謂的靜態(tài)類數(shù)據(jù)。
不能在VisualBasic類模塊中實(shí)現(xiàn)真正的靜態(tài)類數(shù)據(jù)。但是,通過使用Property過程在標(biāo)準(zhǔn)模塊中設(shè)置及返回Public數(shù)據(jù)成員的值,可以仿真靜態(tài)類數(shù)據(jù),如以下的代碼:
'只讀屬性返回應(yīng)用程序的名字。
Property?Get?CommonString()?As?String
???'變量?gstrVisibleEvery
8、where?保存在
???'標(biāo)準(zhǔn)模塊中,并聲明為?Public。
???CommonString?=?gstrVisibleEveryw