当前位置 >> 课程学习 >> 第4章 >> 4.1 基本概念

4.1 基本概念

4.1.2 变量

    在VB.NET执行应用程序期间,用变量临时存储数值。
    变量具有名字(用来引用变量所包含的值的词)和数据类型(确定变量能够存储的数据的种类)。
    1.变量命名原则
  • 必须以字母开头
  • 不能包含嵌入的(英文)句号或者嵌入的类型声明字符
  • 不得超过255个字符
  • 在同一个范围内必须是唯一的。范围就是可以引用变量的域,如一个过程、一个函数等。由于“Dim”语句中的可选的“As Type”子句,可以定义被声明变量的数据类型或对象类型。数据类型定义了变量所存储信息的类型。变量也可以包含来自Visual Basic或其他应用程序的对象,如“Form”和“TextBox”等。

    注意:“As Type”在默认的情况下是必写的,如果要将“As Type”变成可选的,则需将工程属性页中的“Build”选项中“Option strict”设置为“Off”,这样在没有“As Type”的变量声明中,“Object”类型是其默认的数据类型。

    2.声明变量
    在使用变量前,一般先声明变量名称及类型,以便系统为它分配存储单元。在VB.NET可以使用显式声明变量和隐式声明变量两种方式来声明变量。
    (1)显式声明
    所谓显式声明是指每个变量必须事先声明,才能够正常使用,否则会出现错误警告。
    设置显式声明变量的格式如下:
       Declare 变量名 As 数据类型[=初值]
    其中Declare声明符包括Dim、Public、Private和Static等。
    (2)隐式声明
    所谓隐式声明是指用户可以直接在代码中使用变量而无需声明。在VB.NET中所有未声明的变量都是Object类型。
    虽然隐式声明变量使用起来比较方便,但会增加命名冲突的可能,还会隐藏拼写错误,更严重的是会占用大量内存。
    (3)选择声明变量方式
    Option Explicit是声明变量开关,当Option Explicit设置为on时必须要显式声明变量,当Option Explicit设置为off时可以使用隐式声明变量。
    在VB.NET中设置显式声明开关为On或Off的方法:
    在VB.NET集成开发环境中设置相应的项目属性。将工程属性页中的“Build”选项中的“Option Explicit”可以设置为On或Off。
    在代码的开头通过Option Explicit语句更改默认设置。使用Option Explicit语句的语法格式为:
       Option Explicit [On|Off]

    3.变量的属性和方法
    在VB.NET中任何变量都被看作是一个对象。系统将数据类型也看作是一个类。当声明一个变量时,就生成了一个由该类派生出来的、名称为该变量名的对象,所以变量也可以称为变量对象。
    根据变量对象的数据类型,每个变量对象都有许多自己的属性和方法。在代码编辑窗口中,在变量名后输入“.”,系统会自动弹出一个下拉列表框提示该变量的属性和方法。

    4.变量的范围
    变量的范围确定了能够访问该变量存在的那部分代码。在一个过程内部声明变量时,只有过程内部的代码才能访问或改变那个变量的值;它有一个范围,对该过程来说是局部的。但是,有时需要使用具有更大范围的变量,例如这样一个变量,其值对于同一模块内的所有过程都有效,甚至对于整个应用程序的所有过程都有效。Visual Basic允许在声明变量时指定它的范围。
    (1)过程内部使用的变量
    过程级变量只有在声明它们的过程中才能被识别,它们又被称为局部变量。用“Dim”关键字来声明它们,例如:
       Dim int Temp As Integer
    在整个应用程序运行时,用“Dim”声明的变量只在过程执行期间才存在。对任何临时计算来说,局部变量是最佳选择。
    (2)模块内部使用的变量
    按照缺省规定,模块级变量对该模块的所有过程都可用,但对其他模块的代码不可用。可在模块顶部的声明段用Private关键字声明模块级变量,从而建立模块级变量。例如:
       Private int Temp As integer
    在模块级,“Private”和“Dim”之间没有什么区别,但“Private”更好些,因为很容易把它和“Public”区别开来,使代码更容易理解。
    (3)所有模块使用的变量
    为了使模块级的变量在其他模块中也有效,用“Public”关键字声明变量。公用变量中的值可用于应用程序的所有过程。和所有模块级变量一样,也在模块顶部的声明段来声明公用变量,例如:
       Public int Temp As Integer
    注意:不能在过程中声明公用变量,只能在模块的声明段中声明公用变量。
    (4)静态变量
    变量有其生存的周期,在这一期间变量能够保持它们的值。在应用程序的存活期内一直保持模块级变量和公用变量的值。但是,对于“Dim”声明的局部变量以及声明局部变量的过程,仅当过程在执行时这些局部变量才存在。通常,当一个过程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始化。但可将局部变量声明定义成静态的,从而保留变量的值。在过程内部用“Shared”关键字声明一个或多个变量,其用法与“Dim”语句完全一样:
    Shared Depth
    例如,下面的函数将存储在静态变量“Accumulate”中的以前的运营总值与一个新值相加,以计算运营总值。
    Function RunningTotal(num)
    shared ApplesSold As Integer
    ApplesSold=ApplesSold+num
    RunningTotal=ApplesSold
    End Function
    如果用“Dim”而不是“Shared”声明“ApplesSold”,则以前的累计值不会通过调用函数保留下来,函数只会简单地返回调用它的那个相同值。在模块的声明段声明“ApplesSold”,并使它成为模块级变量,由此也会收到同样的效果。但是,这种方法一旦改变变量的范围,过程就不再对变量排他性存取。由于其他过程也可以访问和改变变量的值,所以运营总值也许不可靠,代码将更难于维护。
    注意:Visual Basic以前版本是用“Static”关键字来声明变量,在VB.NET中"Shared"关键字取代了“Static”关键字,静态变量要慎用,因为一旦声明了静态变量,这个变量就会常驻内存,如果声明的静态变量很多,有可能影响系统的性能。