2011-01-20 5 views
7

Quando eseguo una dichiarazione comeUna classe VB6 ha un distruttore?

Set MyObject = Nothing 

c'è una particolare funzione all'interno della classe che viene richiamato (vale a dire che posso usare come un distruttore), di fare cose come pulire gli array, disconnettersi dal database, e così via?

risposta

16

Analogamente al Class_Initialize, il costruttore, c'è anche un distruttore:

Sub Class_Terminate 
    ... ' Put your destructor code here ' 
End Sub 

Questo metodo viene eseguito non appena il conteggio dei riferimenti di questo oggetto raggiunge lo zero, cioè quando tutte le variabili che fanno riferimento a questo oggetto sono andate fuori campo o sono state impostate per impostare qualcos'altro (per esempio. Nothing). Pertanto, Set MyObject = Nothing chiamerà il distruttore solo se MyObject è l'ultima variabile che fa riferimento a questo oggetto.

+0

+1: questo mi dava fastidio per un po '. Mi hai messo a tacere: o) –

+3

Per quanto mi piaccia usare VB6, questo ha i suoi lati negativi. Ad esempio, non viene chiamato se il programma si arresta in modo anomalo (eccezioni non gestite, istruzione End eseguita, ecc.) Quindi non fare affidamento su di esso per sbloccare file, svuotare i buffer finali, ecc. – Bob77

+0

Grazie, @Heinzi e @Bob Riemersma. –

-1

No. VB6 non fornisce alcun meccanismo al programmatore per scrivere qualcosa esplicitamente. Ciò che un programmatore può fare è Set MyObject = Nothing e VB si prenderà cura di tutto il resto.

UPDATE:

Si può usare il Class_Terminate per gestire questa

+2

errato. Il metodo 'Class_Terminate' viene attivato quando un oggetto esce dall'ambito o è impostato su' Nothing'. –

+0

Siamo spiacenti! Stand corretto. – Kangkan