假设我有一个类模块clsMyClass
,其中一个对象作为成员变量。下面列出了这个非常简单的类的两个完整实现。
实施1:
Dim oObj As New clsObject
实施2:
Dim oObj As clsObject
Private Sub Class_Initialize()
Set oObj = New clsObject
End Sub
Private Sub Class_Terminate()
Set oObj = Nothing
End Sub
这两者之间是否有任何功能差异?特别是,oObj
的生命周期是否相同?
答案 0 :(得分:5)
在实现1中,clsObject在使用之前不会被实例化。如果从未使用过,那么clsObject.Class_Initialize事件将永远不会触发。
在实现2中,将在实例化clsMyClass的同时创建clsObject实例。如果创建clsMyClass,将始终执行clsObject.Class_Initialize。
答案 1 :(得分:0)
如果在实现1中,声明在类中而不是sub,则两个示例的范围相同。
答案 2 :(得分:0)
每当垃圾收集确定不再有对所述对象的引用时,将销毁对象变量。因此,在您的两个示例中,假设clsObject的范围相同,则对象的销毁时间没有区别。