本帖最后由 hwc2ycy 于 2014-4-9 23:43 编辑
3.Static 使用范围:过程 在整个代码运行期间都能保留使用 Static 语句声明的变量的值,直至该模块复位或重新启动。 上面两个过程每个连续运行5次,demo1运行时消息框中的数字会一直递增(每次加1),而demo2运行时消息框始终显示1。
总结: Dim和Private关键字在定义模块级私有变量时是一样的。 在定义变量时,Public和Private关键字只能用于定义模块级变量,而Static只能用于过程内部定义静态变量。 1)Dim可以用于过程内部和外部,但不管用于过程内外,使用Dim语句定义的变量均为私有,无法在模块外使用; 2)Public和Private只能在过程外使用,用来定义模块级变量,区别是Public定义的模块级变量对外界可见,可以被本模块和其他模块使用。而Private定义的模块级变量,只能用于 本模块,不能被其他模块调用。 3)Static只能在过程内部定义静态变量,由Static定义的变量只能用于本过程,不能被本模块的其他模块调用,更不能被其他模块调用。
二、变量的生命周期 变量保留其值的这段时间,称为生存周期。变量的值可能在整个生存周期都在改变,但它仍然保留着一些值。当变量失去了范围之后,它也就不再保存着任一个值。
当过程开始运行时,所有的变量都会被初始化。一个数值变量会初始化成 0,变长字符串被初始化成零长度的字符串,而定长字符串会被填满 ASCII 字符码 0 所表示的字符或是 Chr(0)。Variant变量会被初始化成 Empty。用户定义类型中每一个元素变量会被当成个别变量来做初始化。
当声明一个对象变量时,内存中虽有保留空间,但它的值会被设置成 Nothing,直到利用 Set 语句对它指定一个对象引用。
如果在代码的运行期间,变量的值一直没有改变,则它会继续保有它的初始值直到它丢失范围为止。
Dim 语句声明过程的级别变量将保留一个值,直到此过程结束为止。如果该过程调用其它的过程,则在这些过程正在运行的同时,属于调用者过程的变量也保留它的值。
如果过程的级别变量是用 Static 关键字来声明的,则只要代码正在任何模块中运行访问该变量后仍会保留它的值。它的存活期和模块级别的变量是一样的。
之前有提到代码重新设置会把模块级变量和静态变量的值复位,另外还有个End语句也会如此。 |