Frage
Angenommen, ich ein Klassenmodul clsMyClass
mit einem Objekt als Member-Variable haben. Im Folgenden sind zwei komplette Implementierungen dieser sehr einfach Klasse.
Die Umsetzung 1:
Dim oObj As New clsObject
Implementierung 2:
Dim oObj As clsObject
Private Sub Class_Initialize()
Set oObj = New clsObject
End Sub
Private Sub Class_Terminate()
Set oObj = Nothing
End Sub
Gibt es einen funktionellen Unterschied zwischen diesen beide? Insbesondere ist die Lebensdauer von oObj
gleich?
Lösung
Bei der Implementierung 1 die clsObject nicht instanziert werden, bis es verwendet wird. Wenn es nie verwendet wird, dann wird das clsObject.Class_Initialize Ereignis nie ausgelöst.
Bei der Implementierung 2 wird die clsObject Instanz zur gleichen Zeit erstellt werden, die die clsMyClass instanziiert wird. Die clsObject.Class_Initialize wird immer dann ausgeführt werden, wenn clsMyClass erstellt wird.
Andere Tipps
Wenn bei der Umsetzung 1 die Erklärung innerhalb der Klasse und nicht die Unter, ja der Umfang ist das gleiche für beiden Beispiele.
Die Objektvariablen zerstört werden, wenn die Garbage Collection dort bestimmt nicht mehr Verweise auf das Objekt. So in Ihren beiden Beispielen ist der Umfang der clsObject unter der Annahme der gleichen, gibt es keinen Unterschied in der, wenn das Objekt zerstört wird.