Esporta (0) Stampa
Espandi tutto

Metodo Object.Finalize

Consente a un oggetto Object di provare a liberare risorse ed eseguire altre operazioni di pulitura prima che l'oggetto Object stesso venga recuperato dalla procedura di Garbage Collection.

Spazio dei nomi: System
Assembly: mscorlib (in mscorlib.dll)

~Object()
protected void finalize ()
protected function Finalize ()

Il metodo Finalize è protetto, pertanto è accessibile soltanto attraverso questa classe o una classe derivata.

Il metodo viene chiamato automaticamente dopo che un oggetto è divenuto inaccessibile, a meno che l'oggetto non sia stato esonerato dalla finalizzazione attraverso una chiamata al metodo SuppressFinalize . Durante la chiusura del dominio applicazione, Finalize viene automaticamente chiamato sugli oggetti che non sono esenti dalla finalizzazione, anche quelli ancora accessibili. La chiamata automatica a Finalize viene eseguita soltanto una volta per una determinata istanza, a meno che l'oggetto venga registrato nuovamente attraverso un meccanismo quale ReRegisterForFinalize e che GC.SuppressFinalize non sia stato successivamente chiamato.

Ogni implementazione di Finalize in un tipo derivato deve chiamare la propria implementazione di Finalize del tipo di base. Questo è l'unico caso in cui il codice dell'applicazione può chiamare il metodo Finalize.

Le operazioni di Finalize hanno i seguenti limiti:

  • Non è definito il momento esatto in cui viene eseguito il finalizzatore durante la procedura di Garbage Collection. Non è certo che le risorse vengano rilasciate in un dato momento, a meno che non si chiami un metodo Close o Dispose.

  • Non è certo che i finalizzatori di due oggetti vengano eseguiti in un ordine specifico, anche se un oggetto fa riferimento all'altro. Vale a dire, se l'Oggetto A ha un riferimento all'Oggetto B ed entrambi dispongono di finalizzatori, è probabile che l'Oggetto B sia già stato finalizzato quando viene avviato il finalizzatore dell'Oggetto A.

  • Non è specificato il thread su cui viene eseguito il finalizzatore.

Il metodo Finalize potrebbe non essere completato o non essere avviato affatto nei seguenti casi eccezionali:

  • Un altro finalizzatore è bloccato in modo indefinito, ossia è entrato in un ciclo infinito, esegue il tentativo di ottenere un blocco che non potrà mai ottenere e così via. Poiché viene eseguito il tentativo di completare i finalizzatori ad parte del runtime, gli altri finalizzatori non potranno essere chiamati se uno di essi è bloccato in modo indefinito.

  • Il processo termina senza aver dato alcuna possibilità al runtime di eseguire una pulitura. In questo caso, la prima notifica di completamento del processo effettuata dal runtime è una notifica DLL_PROCESS_DETACH.

Il runtime continua a utilizzare il metodo Finalize sugli oggetti durante la chiusura soltanto quando il numero di oggetti finalizzabili continua a diminuire.

Se il metodo Finalize o un override di Finalize genera un'eccezione e il runtime non è contenuto in un'applicazione che esegue l'override del criterio predefinito, il runtime termina il processo e nessun blocco try-finally o finalizzatori vengono eseguiti. Questo comportamento garantisce l'integrità del processo qualora il finalizzatore non possa liberare o distruggere risorse.

Note per gli implementatori: Object.Finalize non effettua alcuna operazione predefinita. Deve essere sottoposto a override da una classe derivata soltanto se necessario, perché il recupero durante la procedura di Garbage Collection tende a durare più a lungo se deve essere eseguita un'operazione di Finalize. Se un oggetto Object contiene riferimenti a risorse, Finalize deve essere sottoposto a override da una classe derivata perché possa liberare queste risorse prima che l'oggetto Object venga eliminato durante la procedura di Garbage Collection. Il metodo Finalize deve essere implementato da un tipo quando utilizza risorse non gestite, ad esempio handle di file o connessioni di database che devono essere rilasciate quando l'oggetto gestito che le utilizza viene recuperato. Per ulteriori informazioni su strumenti complementari e più semplici da gestire per l'eliminazione delle risorse, vedere l'interfaccia IDisposable. Finalize è in grado di intraprendere qualsiasi azione, tra cui ripristinare un oggetto, ovvero renderlo di nuovo accessibile, dopo averlo eliminato durante la procedura di Garbage Collection. L'oggetto può, tuttavia, essere ripristinato soltanto una volta; Finalize non può essere chiamato su oggetti ripristinati durante la procedura di Garbage Collection.

I distruttori rappresentano il meccanismo di C# per eseguire le operazioni di pulitura. I distruttori forniscono una protezione appropriata, ad esempio chiamando automaticamente il distruttore del tipo di base. Nel codice C# non è possibile chiamare o eseguire l'override di Object.Finalize.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0 1.0

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft