`
thecloud
  • 浏览: 880711 次
文章分类
社区版块
存档分类
最新评论

变量的声明和作用域——VB

 
阅读更多

一、声明变量

变量在使用前,必须在代码中进行声明,即创建该变量

在使用变量之前,首先需要声明变量。就是说,必须事先告诉编译器在程序中使用了哪些变量,及这些变量的数据类型以及变量的长度。这是因为在编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,这样可以优化程序的执行。

声明变量有两种方式:隐式声明、显式声明。

隐式声明:变量可以不经声明直接使用,此时VB给该变量赋予缺省的类型和值。这种方式比较简单方便,在程序代码中可以随时命名并使用变量,但不易检查。

显式声明:用声明语句创建变量。

强制显式声明变量:

为了避免写错变量名引起的麻烦,用户可以规定,只要遇到一个未经明确声明就当成变量的名字,VB都发出错误警告。方法是----强制显式声明变量。要强制显式声明变量,只须在类模块、窗体模块或标准模块的声明段中加入这条语句:

  Option Explicit

这条语句是用来规定在本模块中所有变量必须先声明再使用,即不能通过隐式声明来创建变量。在添加Option Explicit语句后,VB将自动检查程序中是否有未定义的变量,发现后将显示错误信息。

如果要自动插入Option Explicit语句,用户只要在工具菜单中选取选项命令,然后单击选项对话框中的编辑器选项卡,再选中要求变量声明选项,如下图

这样VB就会在任何新模块中自动插入Option Explicit语句,但只会在新建立的模块中自动插入。所以对于已经建立的模块,只能用手工方法向现有模块添加Option Explicit语句(只有再重新启动VB,这项功能才有效)。

二、变量的作用域

变量的作用域指的是变量的有效范围。为了能正确地使用变量的值,应当明确可以在程序的什么地方访问该变量。VB中变量可以分为3类:局部(Local)变量、模块(Module)变量及全局(Public)变量,其中模块变量包括窗体模块变量和标准模块变量。各变量位于不同的层次。

局部变量

过程级变量只有在声明它们的过程中才能被识别,它们又称为局部变量。

Dim或者Static关键字来声明它们,两者的区别在于:在整个应用程序运行时,用Static声明的局部变量中的值一直存在,而用Dim声明的变量只在过程执行期间才存在。

对任何临时计算来说,局部变量是最佳选择。例如,可以建立十来个不同的过程,每个过程都包含称作intTemp的变量(同一个变量名在不同的过程中意义可能不同)。只要每个intTemp都声明为局部变量,那么每个过程只识别它自己的intTemp版本。任何一个过程都能够改变它自己的局部的intTemp变量的值,而不会影响别的过程中的intTemp变量。

模块变量

按照缺省规定,模块级变量对该模块的所有过程都可用,但对其它模块的代码不可用。可在模块顶部的声明段用PrivateDim关键字声明模块级变量,从而建立模块级变量。例如:

Private intTemp As Integer

在模块级,PrivateDim之间没有什么区别,但Private更好些,因为很容易把它和Public区别开来,使代码更容易理解。

全局变量

为了使模块级的变量在其它模块中也有效,用Public关键字声明变量。公用变量中的值可用于应用程序的所有过程。和所有模块级变量一样,也在模块顶部的声明段来声明公用变量。例如

Public intTemp As Integer

注意:不能在过程中声明公用变量,只能在模块的声明段中声明公用变量。


总结以上可知声明语句有如下四种格式,这四种语句创建了不同特性的变量,下面来作详细的介绍:

(I)Dim语句,其格式为:

Dim<变量名>[As<数据类型>]

程序运行时,上述声明在内存中为变量分配空间,并使Visual Basic了解随后要处理数据的数据类型。

Dim语句用于在标准模块(Module)、窗体模块(Form)或过程(Procedure)中定义变量或数组

Dim语句在窗体的过程中声明的变量称为局部变量,其作用域仅局限在本过程内部,过程一旦执行完毕,其值也就消失了。

例如

Dim Number As Integer'声明NumberInteger(整型)变量。

Dim I As Integer,j As Integer,k As Integer'同时声明为整型变量。

Dim AnyValue,MyValue'AnyValueMyValue按缺省情况被声明为Variant类型,同时值被设为Empty(空)。

Dim AnotherVar, Choice As Boolean, BirthDate As Date'在一行中声明多种类型变量,AnotherVarVariant类型,因为它的类型被省略了,Choice为布尔型变量,BirthDate为日期型变量。

(2)Private语句.其格式为:

Private<变量名>[As<数据类型>]

如果要在一个窗体模块的所有过程中共享同一个变量,则应在这个窗体模块的声明段Private语句进行声明.这种变量称为模块级变量,其作用域为整个窗体模块。这就好比是您家里的电话号码,它在您所在的城市是通用的,但出了这个范围就不能单独使用了。

(3)Public语句,其格式为:

Public<变量名>[As<数据类型> ]

用来在标准模块中定义全局变量或数组。如果在标准模块的声明段中用Public关键字来声明模块级变量,那么这个变量的作用域是整个工程,即它会在整个工程的所有模块中有效,这种变量称为全局变量,也称公用变量。这就好比是加了邮政区号的电话号码,在全国范围内通用。

(4)static语句.其格式为:

static<变量名>[As<数据类型>·

局部变量在过程执行结束后其值不能被保留下来,在每一次过程重新执行时,变量会被重新初始化。如果希望在该过程结束之后,还能继续保持过程中局部变量的值,就应该用static关键字将这个变量声明为静态变量。这样,即使过程结束,该静态变量的值也仍然保留着。

例如我们可以为一个窗体编写下面这样一程序,可以对用户在窗体上单击的次数计数并用显示出来。

Private Sub Form_click()

Static I As Integer
I = I + 1
Label1.Caption = I

End Sub

再如:

Private Sub Command1_Click()

Static IntCount As Integer
IntCount = IntCount + 1
Select Case IntCount
Case 1
Command1.Caption = "春眠不觉晓"
Case 2
Command1.Caption = "处处闻啼鸟"
Case 3
Command1.Caption = "夜来风雨声"
Case Else
Command1.Caption = "花落知多少"
IntCount = 0
End Select

End Sub

Static换成Dim,运行一下,连续单击窗体,两者结果的不同显而易见。

注意:就像在过程中不能使用PublicPrivate关键字一样,在模块的声明段中不能使用static关键字,会报错。

定义完变量,初值的问题:

整数:0

浮点数:0.0

字符串:""

VariantEmpty(保留字,关键字)不同与null0Nothing

判断它有没有赋值,就看它的值是不是empty

分享到:
评论

相关推荐

    Visual Basic 2008程序设计完全自学教程 1/2

    4.4.2 变量的作用域 4.5 数据类型转换 4.5.1 隐式数据类型转换 4.5.2 显示数据类型转换 4.6 Opion语句 4.6.1 OptionExplicit 4.6.2 OptionStrict 4.6.3 OptionCompare 4.6.4 Optionlnfer 4.7 自定义类型Structure与...

    VBScript介绍手册

    8.1.3 变量的作用域 8.1.4 变量的命名 8.2 JScript的数据类型 8.2.1 数值类型 8.2.2 字符串类型 8.2.3 对象类型 8.2.4 布尔类型 8.2.5 空类型 8.2.6 未定义类型 8.3 JScript的操作符 8.3.1 算术操作符 8.3.2 逻辑...

    asp.net知识库

    实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP...

    Visual Basic 2008程序设计完全自学教程 2/2

    4.4.2 变量的作用域 4.5 数据类型转换 4.5.1 隐式数据类型转换 4.5.2 显示数据类型转换 4.6 Opion语句 4.6.1 OptionExplicit 4.6.2 OptionStrict 4.6.3 OptionCompare 4.6.4 Optionlnfer 4.7 自定义类型Structure与...

    Visual C++ 2005入门经典--源代码及课后练习答案

    2.7 了解存储时间和作用域 76 2.7.1 自动变量 77 2.7.2 决定变量声明的位置 79 2.7.3 全局变量 79 2.7.4 静态变量 82 2.8 命名空间 83 2.8.1 声明命名空间 84 2.8.2 多个命名空间 86 2.9 C++/CLI...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    2.7 变量的作用域 91 2.8 使用对象 92 2.8.1 对象的声明和实例化 92 2.8.2 对象引用 93 2.8.3 取消对象的引用 93 2.8.4 前期绑定与后期绑定 94 2.9 数据类型转换 95 2.10 创建类 100 2.10.1 类 100 ...

    C程序设计语言(第2版·新版中文)

    1.10 外部变量与作用域 第2章 类型、运算符与表达式 2.1 变量名 2.2 数据类型及长度 2.3 常量 2.4 声明 2.5 算术运算符 2.6 关系运算符与逻辑运算符 2.7 类型转换 2.8 自增运算符与自减运算符 2.9 按位...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    精通正则表达式~~~

    动态作用域及正则匹配效应... 295 匹配修改的特殊变量... 299 qr/…/运算符与regex对象... 303 构建和使用regex对象... 303 探究regex对象... 305 用regex对象提高效率... 306 Match运算符... 306 Match的...

    SQLServer2008查询性能优化 2/2

    11.5 使用域和参照完整性 296 11.5.1 非空约束 297 11.5.2 声明参照完整性 299 11.6 避免资源密集型查询 301 11.6.1 避免数据类型转换 301 11.6.2 使用EXISTS代替COUNT(*)验证数据存在 303 11.6.3 使用UNION ...

    SQLServer2008查询性能优化 1/2

    11.5 使用域和参照完整性 296 11.5.1 非空约束 297 11.5.2 声明参照完整性 299 11.6 避免资源密集型查询 301 11.6.1 避免数据类型转换 301 11.6.2 使用EXISTS代替COUNT(*)验证数据存在 303 11.6.3 使用UNION ...

Global site tag (gtag.js) - Google Analytics