来源:网络 | 2007-3-23 | (有4380人读过)
“属性”和“方法” :
上面我说过“属性”其实是两个函数,如果用“Public 体重 As Single”这种方式产生“属性”,VB 就在内部实现这两个函数,或者如果需要在属性从属性取值或赋值的时候做一些其它操作的话,最好自己定义这两个函数:
Option Explicit
Private 当前体重 As Single
Public Event 摔了下去()
Public Event 扑了过去()
Public Sub 扑食()
If 体重 > 50 Then
RaiseEvent 摔了下去
Else
RaiseEvent 扑了过去
End If
End Sub
Public Property Get 体重() As Single
体重 = 当前体重
End Property
Public Property Let 体重(ByVal 新体重 As Single)
If 新体重 > 0 Then
当前体重 = 新体重
Else
Err.Raise vbObjectError + 1, , "属性体重设置值非法"
End If
End Property
因为在“Property Let”时检测了设置值的合法性,这个类的使用会更加方便简洁。下面在以前的窗体中加入一个文本框“体重”,让用户来确定麦克的体重,如果输入值为负值,将跳出错误窗体,如果不希望错误窗体出现,可以在“运动_Click”中加入“On Error Resume Next”来忽略错误或“On Error Goto ...”来捕获错误:
Option Explicit
Private WithEvents 麦克 As 狼
Private Sub Form_Load()
Set 麦克 = New 狼
End Sub
Private Sub 麦克_扑了过去()
MsgBox "麦克门牙磕掉了"
End Sub
Private Sub 麦克_摔了下去()
MsgBox "麦克摔扁了"
End Sub
Private Sub 运动_Click()
麦克.体重 = Val(体重)
麦克.扑食
End Sub
属性的定义和使用基本就是这样,不过有一点提醒大家,其实属性的使用非常广泛,不只可以在“类模块”中,而且可以在窗体模块中,甚至可以在普通模块中,事实上,在普通模块中定义属性时非常有用的一种方法,可以全局的使用一个属性,使代码看起来非常人性化。另外,属性不只可以是“Public”的,而且可以是“Private”的,很多人不用“Public”和“Private”关键字定义变量、属性、函数等并不是一个好习惯,“Dim”虽然好像有一些智能,会自己定义全局还是私有,但是在很多情况下并不是我们所要的,而且它在什么情况下是全局,什么情况下是私有,实在很模糊,建议养成使用“Public”和“Private”的习惯,尽量少用“Dim”。
另外,我曾经用在普通模块中的属性来代替其它人编程时使用全局变量的程序,我没有查找那些使用这些全局变量的地方,但是修改后的程序运行正常,以前因为只是变量,原程序使用一个死循环来检测这些变量的变化,而修改时我把这些代码加入“属性”所在的函数中,完全舍弃了死循环,CPU 占用率大幅度降低,事实上绝大部分时间 CPU 占用率为零,只是在用到时才有占用,很像事件驱动呢。
“方法”就是一个函数,所以没有过多的可说的,不过要注意“方法”和“属性”的对应关系,因为 VB 的“属性”的特性,故可以相当程度上的简化操作,使程序更好读。
比如许多控件的设计其实就是没有注意这一点,所以定义了很多“方法”,如“GetSystemTime”和“SetSystemTime”,其实用一个属性“SystemTime”来代替这两个函数会更好:
Public Property Get SystemTime() As Date
SystemTime = GetSystemTime()
End Property
Public Property Let SystemTime(ByVal NewSystemTime As Date)
Call SetSystemTime(NewSystemTime)
End Property
这样,在调用时就可以用“SystemTime = 日期”的方法设置系统时间,用“日期 = SystemTime”取得系统时间,我想大家都可以看出这样的程序更简练,而且更易读,而容易读的程序才容易维护。事实上,VB 中是用“Time”来称呼这个属性的,只是在帮助里却把它称作“Time 函数”和“Time 语句”,我却以为称作“属性”更实际,而且更容易理解一些。
|