Pergunta

Suponha que eu tenho um clsMyClass módulo de classe com um objeto como uma variável de membro. Listados abaixo são duas implementações completas desta classe muito simples.

Implementação 1:

Dim oObj As New clsObject

Implementação 2:

Dim oObj As clsObject

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

Private Sub Class_Terminate()
    Set oObj = Nothing
End Sub

Existe alguma diferença funcional entre esses dois? Em particular, é a vida de oObj o mesmo?

Foi útil?

Solução

Na implementação 1 a clsObject não vai ficar instanciado até que seja utilizado. Se ela nunca é usada, então o evento clsObject.Class_Initialize nunca vai disparar.

Na implementação 2, a instância clsObject será criada ao mesmo tempo que o clsMyClass é instanciado. O clsObject.Class_Initialize sempre será executado se clsMyClass é criado.

Outras dicas

Se na implementação 1 a declaração está dentro da classe e não um sub, sim, o escopo é o mesmo para ambos os exemplos.

A variável de objeto será destruído sempre que a coleta de lixo determina que não há mais referências ao dito objecto. Assim, em seus dois exemplos, assumindo que o âmbito da clsObject é o mesmo, não há nenhuma diferença quando o seu objeto será destruído.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top