Question

Supposons que j'ai un module de classe clsMyClass avec un objet en tant que variable membre. Vous trouverez ci-dessous deux implémentations complètes de cette classe très simple.

Mise en oeuvre 1:

Dim oObj As New clsObject

Mise en œuvre 2:

Dim oObj As clsObject

Private Sub Class_Initialize()
    Set oObj = New clsObject
End Sub

Private Sub Class_Terminate()
    Set oObj = Nothing
End Sub

Y at-il une différence fonctionnelle entre ces deux? En particulier, la durée de vie de oObj est-elle la même?

Était-ce utile?

La solution

Dans l'implémentation 1, l'objet clsObject ne sera pas instancié avant son utilisation. S'il n'est jamais utilisé, l'événement clsObject.Class_Initialize ne se déclenchera jamais.

Dans l'implémentation 2, l'instance clsObject sera créée en même temps que l'instance clsMyClass. ClsObject.Class_Initialize sera toujours exécuté si clsMyClass est créé.

Autres conseils

Si, dans l'implémentation 1, la déclaration est à l'intérieur de la classe et non un sous-marin, oui, la portée est la même pour les deux exemples.

La variable d'objet sera détruite chaque fois que le garbage collection détermine qu'il n'y a plus de références à cet objet. Ainsi, dans vos deux exemples, en supposant que la portée de clsObject soit la même, il n’ya aucune différence quant au moment où votre objet sera détruit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top