8

假设我有一个类模块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一样的吗?

4

3 回答 3

5

在实现 1 中,clsObject 在使用之前不会被实例化。如果从未使用过,则 clsObject.Class_Initialize 事件将永远不会触发。

在实现 2 中,将在实例化 clsMyClass 的同时创建 clsObject 实例。如果创建了 clsMyClass,将始终执行 clsObject.Class_Initialize。

于 2008-09-17T19:11:36.813 回答
0

如果在实现 1 中声明在类内部而不是子类中,则两个示例的范围是相同的。

于 2008-09-17T18:56:42.620 回答
0

每当垃圾收集确定不再引用所述对象时,对象变量就会被销毁。因此,在您的两个示例中,假设 clsObject 的范围相同,那么您的对象何时被销毁没有区别。

于 2008-09-17T19:09:34.960 回答