Override del metodo Finalize
Aggiornamento: novembre 2007
Un metodo Finalize rappresenta una misura di sicurezza per la pulitura delle risorse nel caso in cui il metodo Dispose non venga chiamato. Il metodo Finalize dovrebbe essere implementato solo per la pulitura di risorse non gestite. Il metodo Finalize non deve essere implementato per gli oggetti gestiti, in quanto il Garbage Collector esegue la pulitura delle risorse gestite automaticamente. Per impostazione predefinita, il metodo Object.Finalize non esegue alcuna operazione. Se si desidera che il Garbage Collector esegua operazioni di pulitura sull'oggetto prima di reclamarne la memoria, è necessario eseguire l'override di questo metodo nella propria classe.
Nota: |
---|
Non è possibile eseguire l'override del metodo Finalize nei linguaggi di programmazione C# o C++. In C# utilizzare la sintassi del distruttore per implementare il metodo Finalize. Nella versione 2.0 di .NET Framework C++ fornisce una sintassi specifica per l'implementazione del metodo Finalize, come descritto in Destructors and Finalizers in Visual C++. Nelle versioni precedenti C++ utilizzava la sintassi del distruttore per il metodo Finalize, analogamente a C#. |
L'ambito del metodo Object.Finalize è protected. Quando si esegue l'override del metodo nella propria classe, è necessario conservare tale limitazione dell'ambito. Se il metodo Finalize viene mantenuto protetto, si impedisce agli utenti dell'applicazione di chiamare direttamente il metodo Finalize di un oggetto.
Il metodo Finalize di un oggetto deve rilasciare tutte le risorse impegnate dal relativo oggetto. Deve inoltre chiamare il metodo Finalize per la classe base dell'oggetto. Il metodo Finalize di un oggetto non deve chiamare un metodo su alcun oggetto diverso da quelli della propria classe base. Tale limitazione è dovuta al fatto che la procedura di Garbage Collection potrebbe interessare gli eventuali altri oggetti chiamati e l'oggetto chiamante contemporaneamente, come avviene nel caso di un arresto di Common Language Runtime.
Se si consente a un'eccezione di uscire dal metodo Finalize, il sistema presupporrà che il metodo abbia restituito un valore e passerà a chiamare i metodi Finalize di altri oggetti.
Vedere anche
Concetti
Implementazione di un metodo Dispose
Sintassi del distruttore in C# e C++