Visual Basic 中的生存期

更新:2007 年 11 月

已声明元素的“生存期”是元素可供使用的时间周期。变量是唯一具有生存期的元素。因此,编译器将过程参数和函数返回值视为变量的特殊情况。变量的生存期表示它可以存储值的时间周期。在生存期内变量的值可以更改,但变量总是存储某些值。

不同的生存期

“成员变量”(在模块级并且在任何过程外部声明)的生存期一般与声明该变量的元素的生存期相同。在类或结构中声明的非共享变量作为声明该变量的类或结构的每个实例的单独副本存在。每个这样的变量的生存期都与它的实例的生存期相同。但是,Shared 变量仅有一个生存期,即应用程序运行所持续的全部时间。

“局部变量”(在过程内部声明)仅在声明变量的过程的运行阶段存在。这同样适用于过程的参数和任何函数返回值。但是,如果该过程调用其他过程,则局部变量在被调用过程运行期间保留它们的值。

生存期的开始

当控制进入声明局部变量的过程时,局部变量的生存期便开始了。过程一开始运行,每个局部变量即被初始化为其数据类型的默认值。当过程遇到指定初始值的 Dim 语句时,它将那些变量设置为那些值,即使代码已经给它们赋了其他值。

结构变量的每个成员被视为单独的变量初始化。同样,数组变量的每个元素也单独初始化。

在过程内部的块中声明的变量(例如 For 循环)在进入过程时被初始化。不管代码是否执行该块,这些初始化都会生效。

生存期的结束

当过程终止时,不保留其局部变量的值,Visual Basic 将回收它们占用的内存。下次调用该过程时,将再度创建并重新初始化它的所有局部变量。

当类或结构的实例终止时,它的非共享变量便失去它们的内存和值。类或结构的每个新实例创建并初始化它的非共享变量。但是,Shared 变量一直保留到应用程序停止运行时。

生存期的扩展

如果用 Static 关键字声明局部变量,该变量的生存期要比其过程的执行时间长。下表显示了过程声明如何确定 Static 变量存在的时间长度。

过程位置与共享

静态变量生存期开始

静态变量生存期结束

在模块中(默认为共享)

第一次调用过程时

当应用程序停止运行时

在类或结构中,Shared(过程不是实例成员)

对特定的实例或者对类或结构名称本身第一次调用过程时

当应用程序停止运行时

在类或结构的实例中,非 Shared(过程是实例成员)

对特定的实例第一次调用过程时

当释放实例以进行垃圾回收 (GC) 时

请参见

任务

如何:延长变量的生存期

数据类型的疑难解答

概念

已声明元素的名称

Visual Basic 中的范围

Visual Basic 中的访问级别

变量 (Visual Basic)

Visual Basic 中的变量声明

参考

Shared (Visual Basic)

Nothing (Visual Basic)

Static (Visual Basic)

其他资源

对已声明元素的引用