龐新法 PANG Xin-fa
(陜西省委黨??萍冀萄胁?,西安 710061)
(Shaanxi Province Party School of the CPC,Xi'an 710061,China)
VB6.0中變量的作用域及參數(shù)傳遞
龐新法 PANG Xin-fa
(陜西省委黨??萍冀萄胁?,西安 710061)
(Shaanxi Province Party School of the CPC,Xi'an 710061,China)
本文主要闡述了變量的生存期和作用域的問題,因為它們是程序中引用變量的依據(jù)。同時對同名變量的處理進行了討論,并結(jié)合實例進行了分析,旨在程序設(shè)計時,能正確的定義和引用變量。
變量;過程;作用域;調(diào)用
一個應(yīng)用程序往往是由若干功能相對獨立,又相互聯(lián)系的子程序組成,程序中必然要用變量來存儲數(shù)據(jù),子程序之間又要相互傳遞數(shù)據(jù)來實現(xiàn)程序功能,因此,在結(jié)構(gòu)化或面向?qū)ο蟮目梢暬绦蛟O(shè)計中,深刻理解和正確使用變量及參數(shù)傳遞十分重要。本文主要介紹VB中變量的作用域及參數(shù)傳遞的形式,并結(jié)合實例予以淺析。
VB面向?qū)ο蟪绦蛟O(shè)計語言具有功能強大、容易學(xué)習(xí)掌握等特點。在教學(xué)中發(fā)現(xiàn),不少學(xué)生在學(xué)習(xí)VB的過程中,對變量的作用域、參數(shù)傳遞不能很好地掌握,以下根據(jù)自己的經(jīng)驗,就變量的作用域、參數(shù)傳遞進行探討。
變量的作用域指的是變量的有效范圍。為了能正確地使用變量的值,應(yīng)當(dāng)明確可以在程序的什么地方訪問該變量。VB中變量可以分為3類:局部變量、模塊變量及全局變量,其中模塊變量包括窗體模塊變量和標(biāo)準(zhǔn)模塊變量。各變量位于不同的層次。
2.1 局部變量 過程級變量只有在聲明它們的過程中才能被識別。過程或函數(shù)內(nèi)部定義,內(nèi)部有效,局部有效,故稱局部變量,誰定義,誰使用。在不同的過程中可以聲明相同名稱的變量,它們相互獨立,互不干擾。局部變量又可分為動態(tài)變量和靜態(tài)變量。動態(tài)變量的值隨過程調(diào)用的結(jié)束而被釋放,動態(tài)變量在過程中用dim定義;靜態(tài)變量的值在過程調(diào)用結(jié)束時不被釋放,而是在窗體關(guān)閉后被釋放,靜態(tài)變量在過程中用static定義。
例1:一個窗體上有command1和command2兩個命令按鈕,程序代碼如下:
連續(xù)單擊command1,連續(xù)顯示5,單擊command2,顯示“編譯錯,變量未定義”,這是因為變量a僅在子程序command1_click()中有效,在 command2_click()中無效,符合“誰定義,誰使用”的原則。
例2:一個窗體上有command1和command2兩個命令按鈕,程序代碼如下:
連續(xù)單擊command1連續(xù)顯示5,連續(xù)單擊command2順次顯示5,10,…遞增。這是因為變量a是動態(tài)變量,過程調(diào)用結(jié)束時便被釋放(動態(tài)申請:用時申請,用完收回);變量b是靜態(tài)變量,過程調(diào)用結(jié)束時不被釋放(靜態(tài)申請:編譯階段申請,用時不申請,用完也不收回,下次調(diào)用,原值保留)。
2.2 窗體模塊級變量 在“通用聲明”部分用dim或private定義的變量,可以被本窗體或本模塊中的其他過程或函數(shù)調(diào)用,不再某個函數(shù)內(nèi)部定義,函數(shù)外部定義,本模塊中所有函數(shù)均有效。變量在本窗體或模塊被卸載后才收回。
例3:一個窗體上有command1和command2兩個命令按鈕,程序代碼如下:
command1_click(),command2_click()均未定義變量 a,a是本模塊中所有函數(shù)共有。程序運行中,若單擊command1,則再原值上加5,單擊command2,則再原值上加10。
2.3 全局變量 在“通用聲明”部分用public定義的變量,可以被應(yīng)用程序的任何過程或函數(shù)調(diào)使用。全局變量的值在整個應(yīng)用程序中不會消失和初始化,只有當(dāng)整個應(yīng)用程序執(zhí)行結(jié)束才收回。定義所在的位置不同,其他窗體或過程引用該變量的方式也有所不同。如在窗體的公共部分內(nèi)用public定義,則工程內(nèi)的其他窗體或模塊引用該變量時,應(yīng)加上該變量所在的窗體名;如在標(biāo)準(zhǔn)模塊內(nèi)用public定義,則工程內(nèi)的其他窗體或模塊引用該變量時直接引用。
例4:在窗體form1上有command1命令按鈕,程序代碼如下:
在窗體form2上有command2命令按鈕,程序代碼如下:
程序運行中,若單擊form1的command1,則再原值上加5,單擊form2的command2,則再原值上加10。
雖然form2沒有定義a,但form1定義了a,該a整個應(yīng)用程序中均有效。
2.4 作用域范圍小的變量優(yōu)先 在一個工程中,如果全局變量、窗體模塊級變量和局部變量同名時,作用域范圍小的變量優(yōu)先。
例5:如下面的程序
運行時單擊 command1,始終顯示 10。單擊command2,則再原值上加10。窗體模塊級的a與局部的a重名,窗體模塊級的a在command1_click()中不起作用。
3.1 傳值 在VB中,過程的調(diào)用離不開參數(shù)的傳遞,傳遞的形式又可分為傳值與引用。采用傳值方式,實參與形參占用不同的存儲空間,形參的值變化時不影響實參的值,形式參數(shù)前有關(guān)鍵字byval。
例6:對于下面的一段程序:
如果單擊command1,則窗體上始終顯示5,值傳遞,形參改變,實參不變。
3.2 引用 采用引用方式,實參與形參占用同一個存儲空間,形參的值變化時實參的值也隨之變化。形式參數(shù)前有關(guān)鍵字byref或沒有關(guān)鍵字。
例7:對于下面的一段程序:
如果單擊command1,則窗體上始終顯示5,引用傳遞,形參改變,實參隨之改變。
在VB中定義變量時,定義所在的位置十分重要;形參的值變化時是否影響實參的值,取決于參數(shù)的傳遞形式是傳值還是引用;本文對此做了簡要淺析。
[1]李暢.Visual Basic程序設(shè)計[M].中國鐵道出版社,2006.
[2]蘇傳芳.Visual Basic程序設(shè)計[M].高等教育出版社,2009.
[3]沈美莉.Visual Basic程序設(shè)計[M].人民郵電出版社,2007.
The Scope and Parameter Passing of Variables in VB6.0
This paper mainly describes the problems about the survival and the scope of variables,because they are basis of variable reference in program.At the same time this paper discusses the treatment of the same variable combined with the analysis of cases in order to correctly definite and reference variables for program design.
variable;process;scope;call
龐新法(1962-),男,陜西禮泉人,副教授,研究方向為計算機教學(xué)。
TP311
A
1006-4311(2014)13-0210-02