如何:延长变量的生存期
更新:2007 年 11 月
一般来说,当编程元素(在其中声明变量)终止时,相应变量就会终止。但是,使用 Static (Visual Basic) 关键字声明变量,就可以使变量的生存期比包含该变量的元素的生存期更长。
有关更多信息,请参见 Visual Basic 中的生存期。
使变量的生存期比包含该变量的元素的生存期更长
如果变量是局部变量(在过程内声明),则将 Static 关键字包括在声明它的 Dim 语句 (Visual Basic) 中。 只要类或模块包含声明变量的过程,就存在静态变量。
如果局部变量在 Shared (Visual Basic) 过程内,只要应用程序运行,该过程及其变量就存在。不要在此情况下使用 Static。
如果变量是成员变量(在任何过程之外的类或结构中声明),则将 Shared 关键字包括在声明它的 Dim 语句中。 共享变量与其类或结构的任何一个实例都不关联,只要应用程序运行,它就存在。不能在成员变量上使用 Static。
如果成员变量是在模块中声明的,则只要应用程序运行,它就始终存在。不要在此情况下使用 Shared。
示例
下面的示例使用 Static (Visual Basic) 关键字声明变量。(请注意,当 Dim 语句 (Visual Basic) 使用 Static 这样的修饰符时,您不需要 Dim 关键字。)
Function runningTotal(ByVal num As Integer) As Integer
Static applesSold As Integer
applesSold = applesSold + num
Return applesSold
End Function
在前面的示例中,过程 runningTotal 返回到调用代码后,变量 applesSold 继续存在。下次调用 runningTotal 时,applesSold 保留其以前计算的值。
如果已经在不使用 Static 的情况下声明 applesSold,则调用 runningTotal 以后,不保留以前的累积值。下次调用 runningTotal 时,将重新创建 applesSold,并将其初始化为 0,runningTotal 将只返回调用它时所用的值。
编译代码
可以将静态局部变量的值初始化为其声明的一部分。如果将数组声明为 Static,则可以初始化它的秩(维数)、每个维度的长度和每个元素的值。
同名的静态变量
可以在多个过程中用相同的名称来声明静态变量。如果这样做,则 Visual Basic 编译器将每个这样的变量视为单独的元素。初始化这些变量中的某一个不会影响其他变量的值。这同样适用于使用一组重载来定义过程、并在每个重载中使用相同的名称声明静态变量的情况。
静态变量的包含元素
可以在类中(即在该类的过程内)声明静态局部变量。但是,不能在结构内声明静态局部变量(作为结构成员或该结构内过程的局部变量)。
安全性
在前面的示例中,通过在模块级声明 applesSold 可产生相同的生存期。但是,如果这样更改变量的范围,此过程将不再拥有对该变量的独占访问权。由于其他过程可以访问 applesSold 并更改它的值,因此流量合计可能是不可靠的,并且代码可能会更难维护。