首页 理论教育 变量作用域及其在VisualBasic程序设计中的应用

变量作用域及其在VisualBasic程序设计中的应用

时间:2023-11-25 理论教育 版权反馈
【摘要】:变量的作用域是指变量的有效作用范围,即变量可以被访问的范围。变量的声明方式和声明位置决定了它的作用域。图3-10 模块级变量运行结果3.全局变量全局变量的作用域最大,其有效范围为整个工程,可以在整个工程中的所有窗体、模块内使用。

变量作用域及其在VisualBasic程序设计中的应用

变量作用域是指变量的有效作用范围,即变量可以被访问的范围。

一个变量声明后,并不是在任何地方都能使用它。变量的作用域决定了哪些过程和函数可以使用该变量。变量的声明方式和声明位置决定了它的作用域。

Visual Basic应用程序由3种模块组成:窗体模块(Form)、标准模块(Module)和类模块(Class),在工程资源管理器中可以看到。

窗体模块由事件过程、通用过程和声明部分组成,而标准模块由通用过程和声明部分组成,如图3-7所示。

978-7-111-49659-5-Chapter03-19.jpg

图3-7 窗体模块和标准模块

根据变量定义的位置和所使用的变量定义语句的不同,Visual Basic中的变量可以分为3类:局部变量、模块级变量、全局变量。

1.局部变量

在过程内定义的变量称为局部变量,其作用域是它所在的过程,在其他的过程中不能访问该变量。局部变量只在其过程中有效,对其他过程没有任何影响。因此,在同一过程中不能定义相同的变量名,而在不同的过程中可以定义相同名称的局部变量,它们相互之间没有任何影响。

例如,可以用Dim和Static语句定义局部变量。

978-7-111-49659-5-Chapter03-20.jpg

Command1中的a、b、c都为局部变量,其作用范围只在Command1_Click事件过程中有效;Command2中的a、c都为局部变量,其作用范围只在Command2_Click事件过程中有效。虽然两个事件过程中都有a和c,但是它们互不影响,当然Command1中的变量b和Command 2就更没有关系了。

再看下面的例子:

978-7-111-49659-5-Chapter03-21.jpg

变量a在Command1_Click执行完毕后,变量a的生命周期结束,其所占内存被回收,也就是说变量a不存在了,当然里面的数据也就消失了。当Command1_Click再次执行时,变量a被重新定义,并初始化为0。通过运行程序,可以验证这一点:运行程序,单击Command1按钮,无论单击多少次,每次单击输出的a值都是10。(www.xing528.com)

而变量c则不同,它使用关键词Static定义,这样变量c称为静态变量。当Command1_Click执行完毕后,变量c的生命周期并未结束,变量c里面的数据仍旧保存在内存中,等下一次Command1_Click执行时,变量c中的初始值就是上次记录下来的数据。运行程序,多次单击Command1按钮,则输出的c值为10,20,30,40…。每次增10,都是在上一次结果之上加10,实现了累加,结果如图3-8所示。

2.模块级变量

在一个窗体或模块中,如果想让所有过程都能访问同一个变量,这就需要在该窗体或模块内的过程之外定义这个变量,使得它在整个窗体或模块内有效,即其作用域为整个窗体或模块,本窗体或本模块内的所有过程都能访问它,这就是窗体和模块级的变量。用户可以用Dim和Private语句在窗体或标准模块的代码窗口中的声明部分定义模块级变量。在定义模块级变量时,使用Dim和Private没有什么区别,如图3-9所示。

978-7-111-49659-5-Chapter03-22.jpg

图3-8 局部变量和静态变量示例

978-7-111-49659-5-Chapter03-23.jpg

图3-9 模块级变量定义

运行程序,结果如图3-10所示,可以看到,变量a在Command1和Command 2两个事件过程中都是有效的,谁都可以修改a的值,谁都可以读取a的值。第一次单击Command1时,因为a的初始值为0,所以输出结果为1;接下来单击Command 2,由于在Command1中已经修改a的值为1,所以输出结果为10;接下来再次单击Command1,由于在Command 2中已经修改a的值10,所以输出结果为11;接下来单击Command 2,由于在Command1中已经修改a的值为11,所以输出结果为110。

978-7-111-49659-5-Chapter03-24.jpg

图3-10 模块级变量运行结果

3.全局变量

全局变量的作用域最大,其有效范围为整个工程,可以在整个工程中的所有窗体、模块内使用。用户可以用Public或Global语句在窗体或标准模块的声明部分定义全局变量。注意,全局变量只能用Public或Global语句定义,不能使用Dim语句定义。在窗体或标准模块的声明部分定义全局变量,它们的使用方法不同,如果使用窗体中定义的全局变量,则访问时需要在变量名前加窗体名,如图3-11所示。

978-7-111-49659-5-Chapter03-25.jpg

图3-11 全局变量定义

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈