庞新法 PANG Xin-fa
(陕西省委党校科技教研部,西安 710061)
(Shaanxi Province Party School of the CPC,Xi'an 710061,China)
VB6.0中变量的作用域及参数传递
庞新法 PANG Xin-fa
(陕西省委党校科技教研部,西安 710061)
(Shaanxi Province Party School of the CPC,Xi'an 710061,China)
本文主要阐述了变量的生存期和作用域的问题,因为它们是程序中引用变量的依据。同时对同名变量的处理进行了讨论,并结合实例进行了分析,旨在程序设计时,能正确的定义和引用变量。
变量;过程;作用域;调用
一个应用程序往往是由若干功能相对独立,又相互联系的子程序组成,程序中必然要用变量来存储数据,子程序之间又要相互传递数据来实现程序功能,因此,在结构化或面向对象的可视化程序设计中,深刻理解和正确使用变量及参数传递十分重要。本文主要介绍VB中变量的作用域及参数传递的形式,并结合实例予以浅析。
VB面向对象程序设计语言具有功能强大、容易学习掌握等特点。在教学中发现,不少学生在学习VB的过程中,对变量的作用域、参数传递不能很好地掌握,以下根据自己的经验,就变量的作用域、参数传递进行探讨。
变量的作用域指的是变量的有效范围。为了能正确地使用变量的值,应当明确可以在程序的什么地方访问该变量。VB中变量可以分为3类:局部变量、模块变量及全局变量,其中模块变量包括窗体模块变量和标准模块变量。各变量位于不同的层次。
2.1 局部变量 过程级变量只有在声明它们的过程中才能被识别。过程或函数内部定义,内部有效,局部有效,故称局部变量,谁定义,谁使用。在不同的过程中可以声明相同名称的变量,它们相互独立,互不干扰。局部变量又可分为动态变量和静态变量。动态变量的值随过程调用的结束而被释放,动态变量在过程中用dim定义;静态变量的值在过程调用结束时不被释放,而是在窗体关闭后被释放,静态变量在过程中用static定义。
例1:一个窗体上有command1和command2两个命令按钮,程序代码如下:
连续单击command1,连续显示5,单击command2,显示“编译错,变量未定义”,这是因为变量a仅在子程序command1_click()中有效,在 command2_click()中无效,符合“谁定义,谁使用”的原则。
例2:一个窗体上有command1和command2两个命令按钮,程序代码如下:
连续单击command1连续显示5,连续单击command2顺次显示5,10,…递增。这是因为变量a是动态变量,过程调用结束时便被释放(动态申请:用时申请,用完收回);变量b是静态变量,过程调用结束时不被释放(静态申请:编译阶段申请,用时不申请,用完也不收回,下次调用,原值保留)。
2.2 窗体模块级变量 在“通用声明”部分用dim或private定义的变量,可以被本窗体或本模块中的其他过程或函数调用,不再某个函数内部定义,函数外部定义,本模块中所有函数均有效。变量在本窗体或模块被卸载后才收回。
例3:一个窗体上有command1和command2两个命令按钮,程序代码如下:
command1_click(),command2_click()均未定义变量 a,a是本模块中所有函数共有。程序运行中,若单击command1,则再原值上加5,单击command2,则再原值上加10。
2.3 全局变量 在“通用声明”部分用public定义的变量,可以被应用程序的任何过程或函数调使用。全局变量的值在整个应用程序中不会消失和初始化,只有当整个应用程序执行结束才收回。定义所在的位置不同,其他窗体或过程引用该变量的方式也有所不同。如在窗体的公共部分内用public定义,则工程内的其他窗体或模块引用该变量时,应加上该变量所在的窗体名;如在标准模块内用public定义,则工程内的其他窗体或模块引用该变量时直接引用。
例4:在窗体form1上有command1命令按钮,程序代码如下:
在窗体form2上有command2命令按钮,程序代码如下:
程序运行中,若单击form1的command1,则再原值上加5,单击form2的command2,则再原值上加10。
虽然form2没有定义a,但form1定义了a,该a整个应用程序中均有效。
2.4 作用域范围小的变量优先 在一个工程中,如果全局变量、窗体模块级变量和局部变量同名时,作用域范围小的变量优先。
例5:如下面的程序
运行时单击 command1,始终显示 10。单击command2,则再原值上加10。窗体模块级的a与局部的a重名,窗体模块级的a在command1_click()中不起作用。
3.1 传值 在VB中,过程的调用离不开参数的传递,传递的形式又可分为传值与引用。采用传值方式,实参与形参占用不同的存储空间,形参的值变化时不影响实参的值,形式参数前有关键字byval。
例6:对于下面的一段程序:
如果单击command1,则窗体上始终显示5,值传递,形参改变,实参不变。
3.2 引用 采用引用方式,实参与形参占用同一个存储空间,形参的值变化时实参的值也随之变化。形式参数前有关键字byref或没有关键字。
例7:对于下面的一段程序:
如果单击command1,则窗体上始终显示5,引用传递,形参改变,实参随之改变。
在VB中定义变量时,定义所在的位置十分重要;形参的值变化时是否影响实参的值,取决于参数的传递形式是传值还是引用;本文对此做了简要浅析。
[1]李畅.Visual Basic程序设计[M].中国铁道出版社,2006.
[2]苏传芳.Visual Basic程序设计[M].高等教育出版社,2009.
[3]沈美莉.Visual Basic程序设计[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-),男,陕西礼泉人,副教授,研究方向为计算机教学。
TP311
A
1006-4311(2014)13-0210-02