发信人: pack27()
整理人: gzwsh(2001-05-12 22:56:12), 站内信件
|
第四天、建立能做点事的类
下面是我们在《第二天》里建立的cDeveloper类的代码框架,我将在这段代码里直接加上一些新的代码,让它能做一点事件。请注意比较下面的代码与《第二天》中的代码有什么不同。
Option Explicit
'local variable(s) to hold property value(s)
Private mvarDeveloperName As String 'local copy
Private mvarEmpolderTool As String 'local copy
'To fire this event, use RaiseEvent with the following syntax:
'RaiseEvent EmpolderLost[(arg1, arg2, ... , argn)]
Public Event EmpolderLost()
'To fire this event, use RaiseEvent with the following syntax:
'RaiseEvent EmpolderSucceed[(arg1, arg2, ... , argn)]
Public Event EmpolderSucceed()
Public Sub Empolder()
Dim intSucceed As Integer 'Msgbox返回的是Integer变量,所以这里定义为Integer变量,您当然也可以定义它为Long,因为Long的存储空间大于Integer.
MsgBox "现在进行开发"
intSucceed = MsgBox("开发成功了吗?", vbYesNo + vbQuestion + vbDefaultButton2, "问题")
If intSucceed = vbYes Then 'vbYes是一个VB常量,它的值是一个Integer型的数据.
RaiseEvent EmpolderSucceed '如果开发成功,则激发EmpolderSucceed事件
Else
RaiseEvent EmpolderLost '如果没有开发成功,则激发EmpolderLost事件
End If
End Sub
Public Sub Study()
MsgBox mvarDeveloperName & ":请您进一步学习您的" & mvarEmpolderTool & "开发工具", vbInformation, "注意"
'在这里,您看到了对mvarDeveloperName和mvarEmpolderTool的调用,
'因为这是从类的内部调用DeveloperName属性和EmpolderTool属性,所以可以直接访问存储这两个属性的
'模块内部变量mvarDeveloperName和mvarEmpolderTool.
End Sub
Public Property Let EmpolderTool(ByVal vData As String)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.EmpolderTool = 5
mvarEmpolderTool = vData
End Property
Public Property Get EmpolderTool() As String
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.EmpolderTool
EmpolderTool = mvarEmpolderTool
End Property
Public Property Let DeveloperName(ByVal vData As String)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.DeveloperName = 5
mvarDeveloperName = vData
End Property
Public Property Get DeveloperName() As String
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.DeveloperName
DeveloperName = mvarDeveloperName
End Property
然后我们可以在工程中添加一个新窗体,这个窗体为启动窗体,在这个窗体上画一个名为Command1的按钮,用来测试我们的类。把下面的代码COPY到这个窗体的代码窗口中。
Option Explicit
Private WithEvents MyDeveloper As cDeveloper
Private Sub Command1_Click()
With MyDeveloper
.DeveloperName = "黄河"
.EmpolderTool = "C++"
.Empolder
End With
End Sub
Private Sub Form_Load()
Set MyDeveloper = New cDeveloper
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set MyDeveloper = Nothing
End Sub
Private Sub MyDeveloper_EmpolderLost()
With MyDeveloper
.Study
End With
End Sub
Private Sub MyDeveloper_EmpolderSucceed()
With MyDeveloper
MsgBox .DeveloperName & ":您已经用您的" & .EmpolderTool & "工具成功完成了您的开发工作"
End With
End Sub
您最好是照着这段代码自己录入到窗体中,这样您可以有更直接的理解。
比如,在这个窗体的代码窗口上方的对象下拉列表中,您可以看到MyDeveloper这一项,对它的访问方式很象一个CommandButton的实例Command1。当您在这里选中MyDeveloper时,在对象下拉列表右边的程序例表中(英文版是procedure我把它译为程序),您可以找到MyDeveloper的两个事件。这更象是一个标准的VB对象。但请注意我们在申明这个对象时,使用了WithEvents关键字,这是告诉VB,这个对象是可以接受事件的。您可以试着把WithEvents删掉,看看程序有什么变化。
然后我们运行这个程序,看看会发生什么事吧。您可以逐语句地调试这个程序,看看它是怎样运行的,这样您可以更好地理解它。
我还想说一点:您也许会说,用类编写VB程序有些么好处呀?看过了我的这几篇贴子的朋友,只要你们想一想,一定会清楚,用类编写程序,和我们以前的写程序的方式的最大的不同其实在于,我们编程的思路变了,用类编程,就是面向对象编程的最有效的方法。用以前的方式,我们的程序的每一个功能都象是由我们自己完成的(其实也是),用类编程,就好象是我们先教会一个对象所有要用到的功能,然后我们可以不去管这个对象怎样完成这些它已经学会的功能,只用考虑怎样去调用这个类。就好象一家电脑公司,以前是一切工作都是由老板一个人完成,现在新聘员工,教会他们怎样工作,然后就只用告诉这个员工要做什么工作就可以了,进一步的工作由这个员工去完成。从前面的类的例子中,我们看不出这样做的好处,但如果您的程序更大,代码更多,就如同一家大的电脑公司,培养一个甚至一批能自己完成工作的员工是很有必要的,尽管在开始培养时您会花多一点的时间,但这个过程完成后,您就会感到这样做的好处了。而且当您有了大量的自己的类库时,您以后的程序的工作量会很大程度上地减少--这该叫作人才储备吧。
还有,一个程序中可能不只一个类,而且根据您的程序的复杂程序,可能有很多的类,而且还可能有集合类。关于集合类,在以后我们再进行讨论。
因为这只是一个简单的例子,所以这个类没有什么实际的作用。在下次的贴子中,我会和您一起写一个有实际作用的类。
(未完待续)
---- ......
不想想起偏更记起
假装开心心更悲
辗转翻侧因为你起
愿你不是你
......
可捒选不恋上你么
可捒选不想你么
种种捒选可以许多
若我不是我
...... |
|