类的属性可以使用属性过程Property Let和Property Get,如果您会使用Public变量,一定会说:在类模块中使用一个Public变量来替代Property Let和Property Get过程不是一样的吗?比如:
Public Property Let UserName(ByVal vData As String)
mvarUserName = vData
End Property
Public Property Get UserName() As String
UserName = mvarUserName
End Property
可以用:
Public UserName As String
来替代,在调用类的实例时,同样可以用
MyUser.UserName = Text2 或者 Text2=MyUser.UserName 这样的语句。
这样想是对的,对于这个UserName属性,因为它是可读可写的属性,而且对它没有别的操作,所以用一个Public变量完全可以替代它。但是我们想一想,如果这个属性是一个只读属性,或者只写属性,会怎样呢?
因为一个Public变量是可写可读的,所以用它不能解决这个问题。而用Property Let和Property Get过程,却可以解决:
只读属性(删掉Property Get语句)只用:
Public Property Let UserName(ByVal vData As String)
mvarUserName = vData
End Property
只写属性(删掉Property Let语句)只用:
Public Property Let UserName(ByVal vData As String)
mvarUserName = vData
End Property
我们再考虑一种情况:如果我们的类要检查用户输入的内容是否合法:比如UserName不能为空,用Public变量就不可能解决或者说不太好解决。用Property Let和Property Get过程却可以:
Public Property Let UserName(ByVal vData As String)
If vData=”” Then
Msgbox “用户名为空!”
Else
mvarUserName = vData
End If
End Property
还有一种情况是只能写一次的属性。
所以,什么时候用Public变量,什么时候用属性过程,是根据您的实际情况来定的,对无限制的属性,可用Public变量,对有限制的属性用属性过程。