vb中static用法超详细阐述

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

vb中static用法超详细阐述

本文的主要目的在于澄清vb中静态变量static的使用方法以及这样使用的意义。实方法可能大家都知道,但差距在于你没有多问一个为什么:这个static存在的意义在哪?

定义变量的方法有dim、static、private、public、redim。变量的定义位置也分为模块级、过程级、窗体通用级(相当于特殊的模块级,为什么这么说一会你就明白了。)

参考MSDN:static在过程(过程不分在窗体中、还是在模块中,使用都一样)级别中使用,用于声明变量并分配存储空间。在整个代码运行期间都能保留使用static语句声明的变量的值。下面看一个例子:

Dim number3 As Integer

Private Sub ceshi()

Static number1 As Integer

Dim number2 As Integer

'number1 = 0

number1 = number1 + 1

number2 = number2 + 1

Print number1

Print number2

End Sub

Private Sub Command1_Click()

Call ceshi

End Sub

Private Sub Command2_Click()

number3 = number3 + 1

Print number3

End Sub

Private Sub Command3_Click()

number3 = number3 + 1

Print number3

End Sub

Private Sub Command4_Click()

Print number3 + 1

End Sub

在Command1的Click事件中,调用了ceshi函数,在ceshi这个过程(方法)中,定义了一个静态变量number1,一个普通变量number2。接下来让他们分别自增1,然后在窗体中输出两个变量。下面连点两次Command1,输出结果如图:

发现number1两次的值不一样,而number2两次的值相同。这就是因为static 发挥了作用。每点击一次按钮就调用一次ceshi过程,用static声明的变量一直存在于程序中,直到程序结束;dim声明的普通变量在每次调用过程结束时,它所占用的内存就被释放,下次调用时重新初始化,而static在整个程序中只被初始化一次。所以,每次调用ceshi时,number1的值都是使用的上次保留的值,而number2使用的都是被重新初始化成0。因此,number1的值会永远累加下去(不溢出的前提下),而number2的值永远是1。(思考:如何取消static的作用?关键在于初始化,只需要在定义下边加上number1=0,强制初始化,number1的值也永远是1了)

继续探究,为什么非要在过程级别中使用static呢?如果我们在窗体的通用中声明一个static变量是不允许的(其实,这样做是没有任何意义的)。还是运行上边的代码,点击Command2、Command3(不分先后,不分次数,随便点)。运行结果(我的结果,依点击次数而定):

这两个按钮代码一样,都是让number3的值自增1,然后输出。number3是一个通用级变量,没有在过程中。我们发现无论怎么点2、3这两个按钮,输出的结果都加1,也就是number3的值加1。这说明一个通用级变量相当于一个静态变量,无论哪个过程(之所以用两个按钮,就是为了体现是不同的过程访问number3,请读者体会。)访问,这个变量只初始化一次,使用的值是上一次的值,不断累加。所以我们在通用中声明一个static变量是没有任何意义的。

附:该代码还有一个Command4,点击后输出结果总为1,可能有些人会困惑:number3不是全局变量吗?怎么又不能累加了?因为number3+1并没有改变number3的值,按钮2、3的才是改变了number3的值,所以每次输出结果是不会变的。

同理,在模块中声明的变量都是静态变量(参考MSDN:所有的模块级变量都是静态的),所以在模块中声明static也是没有意义的。(注:在模块的过程中变量的使用和窗体中是一样的,这里说的模块中声明static是指所有过程的外部声明,类似于窗体的通用,所以说窗体通用级相当于特殊的模块级)

个人想法,如有错误、误解之处请谅解

相关文档
最新文档