代码改变世界

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

2010-12-21 14:55  javaspring  阅读(272)  评论(0编辑  收藏  举报

一、声明变量

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

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

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

隐式声明:变量可以不经声明直接使用,此时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 变量。

模块变量

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

    Private intTemp As Integer

在模块级,Private  Dim 之间没有什么区别,但 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