第四章 过程与变量的作用域

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第四章过程与变量的作用域本章主要内容过程概述VisualBasic的代码模块VisualBasic的过程变量的作用域用户自定义类型第四章过程与变量的作用域4.1过程概述过程:是用来执行一个特定任务的一段程序代码。VB中有两类过程:(1)由系统提供的内部函数过程和事件过程。(2)用户根据自己的需要定义、供事件过程多次调用的自定义过程。自定义过程又分为以下几类:以“Sub”保留字开始的子过程。以“Function”保留字开始的函数过程。以“Property”保留字开始的属性过程。以“Event”保留字开始的事件过程。第四章过程与变量的作用域4.2VisualBasic的代码模块VB的应用程序是由过程组成的,过程代码放在模块中。VB提供了三类代码模块:窗体模块、标准模块和类模块。VB应用程序.VBP窗体模块.frm类模块.cls标准模块.bas函数过程(function)Sub过程事件过程Sub过程函数过程第四章过程与变量的作用域模块管理是通过工程资源管理器窗口来组织和管理一个工程(应用程序)的。窗体模块(.Frm)标准模块(.Bas)类模块(.Cls)第四章过程与变量的作用域4.1.1窗体模块每个窗体对应一个窗体模块;窗体模块包含窗体及其控件的属性设置、窗体变量的说明、事件过程、窗体内的通用过程、外部过程的窗体级声明等;窗体模块保存在扩展名为.Frm的磁盘文件中,默认时应用程序只有一个窗体,因此也只有一个窗体模块文件。如果应用程序有多个窗体,就会相应地有多个窗体模块件。第四章过程与变量的作用域4.1.2标准模块标准模块的作用:在多个不同的窗体中,为了避免在不同的窗体模块中重复书写相同的变量或过程代码,可以创建标准模块。标准模块一般用来存放公共代码过程和声明公共变量。说明:标准模块一般包括全局变量声明、模块级变量声明和通用代码过程等几部分。第四章过程与变量的作用域全局变量声明位于最前面,用关键字public声明,所声明的变量供整个应用程序使用。模块级变量是指只在标准模块使用的变量,用dim或private进行声明。标准模块中的过程代码是公有的,任何窗体或模块中的事件过程都可以调用它们。由于标准模块是以单独磁盘文件形式保存的,因此在不同的应用程序中可以调用同一个标准模块。在标准模块中可以包含通用过程,但不可以包含事件过程。第四章过程与变量的作用域4.1.3类模块类模块保存在扩展名为.cls的文件中。可以在.类模块中编写代码建立新对象,这些新对象可以包含自定义的属性和方法,可以在应用程序内的过程中使用。类模块与标准模块的不同之外在于:标准模块仅仅含有代码,而类模块即含有代码又含有数据。类模块可以视为没有物理表示的对象。第四章过程与变量的作用域4.2VisualBasic的过程4.2.1通用过程创建与调试通用过程(sub过程)可以存储在窗体或标准模块中。存储在窗体模块中的通用过程只能被窗体事件过程调用;存储在标准模块中的通用过程则可以被整个工程中的事件过程调用。第四章过程与变量的作用域1.通用过程的创建方法:一是:直接在代码编辑窗口中输入过程代码。二是:使用“添加过程”对话框创建。(1)直接在代码编辑窗口中创建过程的形式如下:[Static][Public|Private]Sub子过程名[(形参列表)][局部变量或常数定义][语句序列1][ExitSub][语句序列2]EndSub第四章过程与变量的作用域形式说明:按默认规定,所有模块中的子过程都为public(公用的)。标准模块的公用过程可以在应用程序中被任意调用;但窗体模块中的公用过程只能在本窗体中调用,若使用private则只有该过程所在模块的程序才能调用该过程。如果使用static(静态)关键字,则该过程中的所有局部变量的存储空间只分配一次,且这些变量的值在整个过程中都存在,如果省略此参数,则过程每次被调用时系统会重新为其变量分配存储空间,当过程结束后存储空间被释放。第四章过程与变量的作用域过程名遵守变量名的命名规则,长度不要超过40个字符。[(形参列表)]类似于变量声明,是用“,”分隔开的若干个变量,格式如下:变量名1[As类型],变量名2[As类型],……或:变量名1[类型符],变量名2[类型符],……形参表中出现的参数称为形式参数,其没有固定的值,只有当过程被调用时,才被一个确定的值所替代。[ExitSub]表示中途退出子过程。第四章过程与变量的作用域(2)使用添加过程对话框创建步骤如下:(1)切换到代码窗口。(2)选择“工具”菜单下的“添加过程”命令,弹出“添加过程”对话框,见下图。第四章过程与变量的作用域(3)在“名称”框中输入过程名。例如在图中显示输入的过程名为“max”。(4)在“类型”组中选取“子程序”。(5)在“范围”组中选取“公有的”定义一个公共级的全局过程,或选取“私有的”定义一个局部过程。(6)单击“确定”按钮,完成对子过程的定义。此时,代码窗口中会自动出现子过程的代码框架。例如:单击图所示对话框的“确定”按钮后,在代码窗口中会出现以下代码:PublicSubsum()EndSub可以在子过程的代码框架中输入语句,以完成相应功能。实例第四章过程与变量的作用域4.2.2函数过程的创建与调用函数过程与子过程最主要的区别在于:函数过程有返回值,而子过程没有返回值。函数过程是自定义过程的另一种形式。当过程的执行需要返回一个值时,使用函数过程比用子过程更加简单方便。第四章过程与变量的作用域1.函数过程的创建语法格式:[Static][Public|Private]Function函数名([形参列表])[As类型][局部变量或常数定义][语句序列1][ExitFunction][语句序列2]函数名=表达式EndFunction第四章过程与变量的作用域说明:I.As类型:指明函数过程返回值的类型。II.在函数过程中至少对函数名赋值一次。从函数过程返回时函数名的值就是返回值。III.无论函数有无参数,函数名后的括号都不能省略。IV.[ExitFunction]表示中途退出函数过程。第四章过程与变量的作用域实例说明:Functionsum(x%,y%)AsIntegersum=x+yEndFunctionPrivateSubForm_Click()d=sum(2,3)PrintdEndSub在上述函数过程中,“AsInteger”定义名为sum的函数过程返回值为整型,通过语句“sum=x+y”对函数名赋值。执行上述语句段,会在窗体上输出数字5。第四章过程与变量的作用域2.函数过程的调用调用函数过程可以由函数名带回一个值给调用程序,被调用的函数必须作为表达式或表达式中的一部分,再与其他的语法成分一起配合使用。因此,与子过程的调用方式不同,函数不能作为单独的语句加以调用。最简单的情况就是在赋值语句中调用函数过程,其形式为:变量名=函数过程名([实参列表])工程第四章过程与变量的作用域4.2.3过程中参数的传递1.形式参数和实际参数形式参数:在定义Sub过程或Function过程时,过程名或函数名后面括弧中的变量名,简称形参。实际参数:在调用Sub过程或Function过程时,过程名或函数名后面括弧中的常量、变量或表达式,简称实参。第四章过程与变量的作用域2.有关规定:多个实参或形参之间用逗号隔开,在定义时,形参为实参预留位置;在调用时实参的值被一一插入到对应的形参位置上去。实参与形参间个数相等,类型相符且书写顺序应一致。实参与形参按顺序对应,一一传递数据。第四章过程与变量的作用域3.传值与传址在调用过程时,参数的传递有两种:按地址传递和按值传递。按址传递:形参和实参使用同一个内存地址单元,因此形参和实参还有一定的联系。按值传递:系统将实参的值传给形参后,形参与实参就断开了联系,调用过程中的操作是在形参自己的存储单元中进行的,一旦过程结束,形参占用的内存全部释放,由此可见,在过程中对形参的任何操作都不会影响实参。第四章过程与变量的作用域传址与传值的区别:最主要的区别是:对形参的操作是否会对实参产生影响。传址时,实参和形参共用一个内存单元,对形参的操作等同于对实参操作。传值时,实参和形参使用不同内存单元,对形参的操作不会对实参产生影响。第四章过程与变量的作用域形式上的区别是:在形参前是否有关键字“ByVal”。使用传址时,无需在形参前加任何关键字使用传值时,需要在形参前加关键字“ByVal”。实参取值上的区别:按址传递,实参不能是常量或表达式,只能是变量。按值传递,实参可以变量、常量或表达式。第四章过程与变量的作用域例4-5按值传递和按址传递示意图应用举例1020实参abyx形参10201020实参ab形参yx20102010按值传递按值传递第四章过程与变量的作用域4.2.4数组参数的传递在VB中允许参数是数组,数组只能通过传址方式进行传递。注意:在实参列表和形参列表中放入数组名,忽略维数的定义,但圆括号不能省略;如果被调过程不知道实参数组的上下界,可用lbound()和ubound()函数来确定实参的上下界。应用举例第四章过程与变量的作用域4.2.5过程的递归递归算法是指一个过程直接或间接调用自己本身的一种方法。main()sub()在被调用的函数中必然存在一个终止条件,否则会陷入死循环Functionf(xasinteger)ifx=10thenf=xelsef=3+f(2+x)endifEndFunction第四章过程与变量的作用域f(2)函数的调用和执行过程z=3+f(4)3+f(6)3+f(8)3+f(10)1013161922第四章过程与变量的作用域例:用递归法计算n!n!=1n=1n*(n-1)!n1fact(n)=n*fact(n-1)fact(4)的执行过程fact(4)4*fact(3)3*fact(2)2*fact(1)2*13*2*14*3*2*124第四章过程与变量的作用域4.3变量的作用域变量的作用域:是指变量在程序中能够被识别的范围。按作用域变量可分为:过程级变量(procedurelevel):是指在过程中声明变量;模块级变量(modullevel):是指在模块中声明变量。按变量的作用范围分类:过程级变量属于局部变量;模块级变量属于全局变量。第四章过程与变量的作用域4.3.1过程级变量在程序内部定义的变量就是“过程级变量”,未经声明,默认为过程级变量;在一个过程内部使用dim或static关键字声明的变量;过程级变量被限制在过程内部使用,一旦退出过程,变量自动消失;常用于存储临时数据或运算的中间结果。例:privatesubcommand1_click()dimaasinteger,basintegerstaticsaslong……endsub第四章过程与变量的作用域4.3.2模块级变量模块级变量根据其作用范围的不同可分为模块级变量和应用程序级变量。一个窗体模块中包含多个事件过程和通用过程,如果希望在整个模块中的多个过程中使用同一个变量,就必须声明为模块级变量。在一个模块内部使用的模块级变量,可以使用private或dim来声明。模块级变量可以在窗体模块、标准模块和类模块中定义,但不可在过程内部定义。第四章过程与变量的作用域例如:privatesassingledimaasinteger,basintegerprivatesubcommand_click()……endsub应用举例第四章过程与变量的作用域4.3.3变量的生存周期程序在退出运行后,变量占用内存单元是释放还是保留,这就是变量的生存周期,根据变量的生存周期,把变量分为:静态变量(static)和动态变量(dynamic)说明:动态变量是指程序运行进入变量所在过程时,系统才分配该变量的内存单元,一旦程序结束,退出过程后,变量所占内存释放;第四章过程与变量的作用域静态变量是指程序运行进入变量所在过程,修改变量的值,退出过程序列后,变量所占内存单元未被释放,变量值仍然

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功