vb中模块级变量是全局变量吗
我们在模块中定义的变量有私有变量和公共变量。private和public。无论哪一种,都是在整个模块中可以被调用的。
这个相对于在过程中dim的变量而言,范围要大的多,是一个模块内的“全局变量”。
而Public则可以在各个窗体间通用。
VB中的模块分为两种,一种是普通模块。一种是类模块。
普通模块的功能一般是把一些函数的集合。
之所以将这些函数集中在一个独立的模块中,就是因为这些函数和程序各个运算过程密切相关,即有可能在多个窗口被调用。
另一方面,独立的模块能使得主程序的代码更简洁。
这些写在模块里面的函数既然能被其他地方调用,则函数对外应该是Public。
但是模块内并不排除使用私有变量。(Private),甚至不排除使用私有函数。
只有在模块中声明是Public类型的变量及函数,才是全局性的。
在类模块中,比如我们定义一个计算类。实现加减乘除,那么这个类对外提供的就是属性和方法。
这些属性和方法的定义应该是Public,任何地方任何时候都可以访问。
比如我们这个计算类是对两个数字进行运算。那么我们可以设置2个属性值。一个是numStr1,一个是numStr2。而在类中表述该属性的变量则是私有的。示范如下:
Private num1 As String '需要计算的数字1,字符串型
Private num2 As String '需要计算的数字1,字符串型
Private method As Integer '计算的方法数字表示,1、加法;2、减法;3、乘法;4、除法;5、开方;6、阶乘
Private rlt As String '计算的结果,字符串型
Private accuracyLong As Long '数据精度,默认长度100
'属性的读取与赋值
Public Property Get numstr1() As String
numstr1 = num1
End Property
Public Property Let numstr1(str As String)
num1 = str
End Property
Public Property Get numstr2() As String
numstr2 = num2
End Property
Public Property Let numstr2(str As String)
num2 = str
End Property
Public Property Get result() As String
result = rlt
End Property
Public Property Let result(str As String)
rlt = str
End Property
Public Property Get calcMode() As Integer
calcMode = method
End Property
Public Property Let calcMode(s As Integer)
method = s
End Property
Public Property Let numberLong(n As Long)
accuracyLong = n
End Property
Public Property Get numberLong() As Long
numberLong = accuracyLong
End Property
Public Property Let calcString(s As String)
Select Case s
Case "+", "加"
method = 1
Case "-", "减"
method = 2
Case "×", "*", "乘"
method = 3
Case "÷", "/", "除"
method = 4
Case "根", "根号", "开方", "平方根", "√"
method = 5
Case "!", "!", "阶乘"
method = 6
Case Else
method = 0
End Select
End Property
在类中对外的方法都是Public,全局性的。但是会在类中存在大量的私有函数。这个时候,我们可以看成public出来的就像一个代理人,一个接口。屏蔽了很多细节。而给我们一个简单的任务完成界面。
这种方式,非常适合多人共同完成程序。也时候一个人分阶段完成一个较大程序。
回答已经超出了问题范围很多。就到这里吧。
2015-05-22
2015-05-22