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