vb(过程和变量的作用域)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
补充例题: 补充例题:
Private Sub Form_Click() Dim i% ,isum% For i = 1 To 5 isum = sum(i) Print isum, , Next i End Sub Private Function sum(n As Integer) Dim j As Integer j=j+n sum = j End Function 1 Static j As Integer 结果如何? 结果如何?
2
3
4
5
7.4 多重窗体与多模块程序设计
一个稍微复杂的应用程序, 不仅有多个窗体, 一个稍微复杂的应用程序 , 不仅有多个窗体 , 还可能 有标准模块和类模块,如下图所示。 有标准模块和类模块,如下图所示。
一个应用程序的组成结构
7.1.1 窗体模块
(文件扩展名为 .FRM ) 文件扩展名为 窗体模块。 窗体模块。窗体模块可以包含处理事件的过 通用过程以及变量、常数、 程、 通用过程以及变量 、 常数、 类型和外部过程 的窗体级声明。如果要在文本编辑器中观察窗体 的窗体级声明 。 模块,则还会看到窗体及其控件的描述, 模块 , 则还会看到窗体及其控件的描述, 包括它 们的属性设置值。写入窗体模块的代码是该窗体 们的属性设置值。 所属的具体应用程序专用的; 所属的具体应用程序专用的 ;它也可以引用该应 用程序内的其它窗体或对象。 用程序内的其它窗体或对象。
窗体/模块级变量: 窗体 模块级变量: 模块级变量 通用声明”段中用Dim语句或用 语句或用Private语句声明的 在“通用声明”段中用 语句或用 语句声明的 变量,可被本窗体/模块的任何过程访问。 但其他模块却 变量, 可被本窗体 模块的任何过程访问。 模块的任何过程访问 不能访问该变量。 不能访问该变量。 例如: 通用声明” 例如:在“通用声明”段声明如下变量 Private s As String Dim a As Integer,b As Single ,
7.1.3 类模块
(文件扩展名为 .CLS) 文件扩展名为 在 Visual Basic 中类模块是面向对象编程的基 可在类模块中编写代码建立新对象。 础 。 可在类模块中编写代码建立新对象 。 这些新 对象可以包含自定义的属性和方法。 实际上, 对象可以包含自定义的属性和方法 。 实际上 , 窗 体正是这样一种类模块, 在其上可安放控件, 体正是这样一种类模块 , 在其上可安放控件 , 可 显示窗体窗口。 显示窗体窗口。
按wenku.baidu.com程的作用范围来划分,过程可分为: 按过程的作用范围来划分,过程可分为: 模块级过程 全局级过程 1、窗体/模块级过程: 、窗体 模块级过程 模块级过程: Private关键字的过程 关键字的过程, 加Private关键字的过程,只能被定义的窗体或模 块中 的过程调用。 的过程调用。 2、全局级过程: 、全局级过程: 关键字( 加Public关键字(或缺省)的过程,可供该应用程序的 关键字 或缺省)的过程, 所有窗体和所有标准模块中的过程调用。 所有窗体和所有标准模块中的过程调用。 用例7.1来说明过程的作用域
二、全局变量同名
如果不同模块中的全局变量使用同一名字, 如果不同模块中的全局变量使用同一名字 , 则 通过同时引用模块名和变量名就可以在代码中区分它 们。 例如, 例如,如果有一个在 Form1 和 Module1 中 都声明了公用的 Integer 变量 intX, 则把它们 , 作为 Module1.intX 和 Form1.intX 来引用便得 到正确值。也就是说如果不同模块中的全局变量使用 到正确值。也就是说如果不同模块中的全局变量使用 同一名字,引用时就需要使用“模块名.变量名 变量名” 同一名字 , 引用时就需要使用 “ 模块名 变量名 ” 的 形式来区分它们。 形式来区分它们。
7.3.5 静态变量 概念
除作用域之外,变量还有存活期, 除作用域之外,变量还有存活期,在这一期间变量能 够保持它们的值。 够保持它们的值。 模块级变量和 在应用程序的存活期内一直保持模块级变量 在应用程序的存活期内一直保持模块级变量和全局变 的值。但是,对于Dim声明的局部变量 声明的局部变量仅当过程执行期 量的值。但是,对于Dim声明的局部变量仅当过程执行期 间存在,当一个过程执行完毕, 间存在,当一个过程执行完毕,它的局部变量的值就已经 不存在,而且变量所占据的内存也被释放 变量所占据的内存也被释放。 不存在,而且变量所占据的内存也被释放。当下一次执行 该过程时,它的所有局部变量将重新初始化。 该过程时,它的所有局部变量将重新初始化。
7.1.2 标准模块
(文件扩展名为.BAS) 文件扩展名为. 文件扩展名为 它们可以包含变量、 常数、 类型、 它们可以包含变量 、 常数 、 类型 、 外部过程 和全局过程的全局(在整个应用程序范围内有效的 在整个应用程序范围内有效的) 和全局过程的全局 在整个应用程序范围内有效的 声明或模块级声明。 声明或模块级声明 。 写入标准模块的代码不必绑 在特定的应用程序上, 在特定的应用程序上 , 则在许多不同的应用程序 中可以重用标准模块。 中可以重用标准模块。
7.3.1 过程级变量 过程级变量——局部变量 局部变量
局部变量: 局部变量: 在过程内用声明的变量,只能在本过程中使用。 在过程内用声明的变量,只能在本过程中使用。
在过程内部使用 Dim 或者 Static 关键字来 声明的变量, 声明的变量,只在声明它们的过程中才能被访问 或改变该变量的值,别的过程不可访问。 或改变该变量的值,别的过程不可访问。所以可 以在不同的过程中声明相同名字的局部变量而互 不影响。 不影响。
7.3.3 全局变量
全局变量也称公有的模块级变量 , 在窗体模块 全局变量 也称公有的模块级变量, 也称公有的模块级变量 或标准模块的顶部的“通用”声明段用Public关键 或标准模块的顶部的“通用”声明段用 关键 字声明, 它的作用范围是整个应用程序, 字声明 , 它的作用范围是整个应用程序 , 即可被 本应用程序的任何过程或函数访问。 本应用程序的任何过程或函数访问。
例如: 例如: Public a As Integer,b As single ,
3种变量声明及使用规则如下表: 种变量声明及使用规则如下表: 种变量声明及使用规则如下表
7.3.4 关于多个变量同名
一、公用变量与局部变量同名
在不同过程中定义同名变量,它们互不影响, 在不同过程中定义同名变量,它们互不影响,但若在一 过程中定义使用了与全局变量同名的变量,则就应注意。 过程中定义使用了与全局变量同名的变量,则就应注意。 注意:在过程中,如果定义了与模块级变量( 注意:在过程中,如果定义了与模块级变量(在通 用部分使用Private或Dim声明的变量),则在该过程内 或 声明的变量), 用部分使用 声明的变量),则在该过程内 不能引用同名的模块级变量。例如,上面的例子中, 不能引用同名的模块级变量。例如,上面的例子中,如 果将定义全局变量的语句Public Temp As Integer改为 果将定义全局变量的语句 改为 Private Temp As Integer 则在 则在Command1的单击事件中就 的单击事件中就 不使用模块级的Temp变量。 变量。 不使用模块级的 变量
7.2 过程的作用域
概念
[Public|Private] Sub 子过程名 形式参数列表]) 子过程名([形式参数列表 形式参数列表 ….. End Sub 通用子过程和函数过程既可写在窗体模块中也可写在 通用子过程和函数过程既可写在窗体模块中也可写在 窗体模块中 标准模块中,在定义时可选用关键字Private 局部) Private( 标准模块中, 在定义时可选用关键字Private ( 局部 ) 和 Public(全局),来决定它们能被调用的范围。 Public(全局) 来决定它们能被调用的范围。
例: Private Sub Form_Load() Dim n% n= 10 End Sub Private Sub From_Click() Dim n% Print “n=“;n End Sub 程序运行后单击窗体,其输出结果是什么? 程序运行后单击窗体,其输出结果是什么?
7.3.2 窗体 模块级变量 窗体/模块级变量
总结归纳过程的定义及作用域如下表(教材 总结归纳过程的定义及作用域如下表(教材Pg.163) )
几点说明:(教材Pg.164) 几点说明:(教材 :(教材 )
7.3 变量的作用域
概述: 概述: 在 VB中 , 由于可以在过程中和模块中声明变 中 根据定义变量的位置和定义变量的语句不同, 量,根据定义变量的位置和定义变量的语句不同, 变量可以分为: 变量可以分为: 局部变量(过程级变量) 局部变量(过程级变量) 窗体/模块级变量(私有的模块级变量, 窗体 模块级变量(私有的模块级变量,能被本 模块级变量 模块的所有过程和函数使用) 模块的所有过程和函数使用) 全局级变量(公有的模块级变量) 全局级变量(公有的模块级变量)。
注意:过程名前加Static,表示该过程内 注意:过程名前加 , 的局部变量都是静态变量。 的局部变量都是静态变量。
有一个人编了下面一段程序,想用变量 记 例7.2 有一个人编了下面一段程序,想用变量n记录单击 窗体的次数。 窗体的次数。 Private Sub Form_Click() Dim n As Integer n = n + 1 Print "已单击次数:"; n & "次" 已单击次数: 已单击次数 次 End Sub 分析程序运行后多次单击窗体的输出结果: 分析程序运行后多次单击窗体的输出结果: 要记录单击窗体次数,如何实现? 要记录单击窗体次数,如何实现?并比较使用模块 变量和静态变量的差别。 变量和静态变量的差别。 教材P168 例7.3 教材
第七章 过程和变量的作用域
7.1 概 述
在第二章我们介绍了VB应用程序(通常称为 第二章我们介绍了VB应用程序( 我们介绍了VB应用程序 工程)的组织结构,它由窗体模块、标准模块和类 工程)的组织结构,它由窗体模块、 窗体模块 模块组成 VB程序代码就保存在窗体模块文件 组成。 模块组成。VB程序代码就保存在窗体模块文件 .Frm)、标准模块文件( .Bas) )、标准模块文件 (*.Frm)、标准模块文件(*.Bas)或类模块文 .Cls) 件(*.Cls)中。它们形成了工程的一种模块层次 结构,如下图所示。 结构,如下图所示。
Public Temp As Integer ' 定义全局变量 Private Sub Form_Load() Temp = 1 ' 将全局变量 将全局变量Temp 的值设置成 1 End Sub Private Sub Command1_Click() Dim Temp As Integer ' 定义局部变量 Temp = 2 ' 将局部变量 将局部变量Temp 的值设置成 2 Print "temp="; Temp Print "temp="; Form1.Temp End Sub Private Sub Command2_Click() Print "temp="; Temp End Sub
局部变量的存活期由其定义的关键词来决定。 局部变量的存活期由其定义的关键词来决定。
局部变量声明: 局部变量声明:
Dim声明:随过程的调用而分配存贮单元,变量的初 声明:随过程的调用而分配存贮单元, 声明 始化;过程体结束,变量的内容自动消失,存贮单元释放。 始化;过程体结束,变量的内容自动消失,存贮单元释放。 Static声明,每次调用过程,变量保持上次调用结束时 声明,每次调用过程, 声明 的值。 的值。 声明形式: 声明形式: Static 变量名 [AS 类型 类型] Static Function 函数过程名 参数列表 [As 类型 函数过程名([参数列表 参数列表]) 类型] Static Sub 子过程名 参数列表 子过程名[(参数列表 参数列表)]