用 Visual Basic 定义的类,不管是类模块、UserControls 还是 UserDocuments,都具有内置的初始化和终止事件。位于初始化事件中的代码将是创建对象时首先被执行的代码。
例如,下面的代码段的第一部分中,SmallMechanicals 部件的 Widget 类在其对象被创建时设置其只读的 Created 属性的值。
'
部件的Widget
类模块代码。'
存储只读Created
属性。Private mdatCreated As Date
'
实现只读Created
属性。Public Property Get Created() As Date
Created = mdatCreated
End Property
'
对象创建时设置只读Created
属性的值。Private Sub Class_Initialize()
mdatCreated = Now
End Sub
'
客户端应用程序代码。Private Sub cmdOK_Click()
Dim wdgX As New SmallMechanicals.Widget
'
显示对象创建的日期/
时间。MsgBox wdgX.Created
End Sub
在该代码段的最后部分,客户端创建了一个 Widget 对象。变量 wdgX
包含对该 Widget 对象的引用;该变量被声明为 As New,所以该 Widget 在第一次运行使用 wdgX
的代码时被创建。当执行 MsgBox 函数时,该 Widget 被创建,且首先执行的代码就是其 Class_Initialize 事件过程。当对新建的 Widget 的只读 Created 属性求值时,它的值已经被设置好了,这样 MsgBox 才会正确地显示该对象被创建的时间。
在 Class_Initialize 事件过程中发生的错误被返回到客户端中请求该对象的地点。因此,在该 Widget 的 Class_Initialize 事件过程中添加下述代码行,将在客户端的 MsgBox 语句发生 31013 号错误。
Err.Raise Number:=31013
终止事件是对象存活期中的最后一个事件。可以在 Class_Terminate 事件过程中放置清除代码,这些代码将在对象的最后一个引用被释放时执行,随后该对象被毁坏。包含从属对象的复杂对象在终止事件中应释放对其从属对象的引用。
终止事件中的错误要谨慎处理。因为终止事件不是由客户端应用程序调用,在调用堆栈中其上无其它过程。这就意味着部件在终止事件中一个未处理的错误将导致致命的错误。
重点 对进程内部件而言,这种致命错误就是客户端的致命错误。因为这种部件在客户端的进程中运行,部件的致命错将导致客户端应用程序被终止。