2013-04-13 13 views
18

Stavo solo implementando il pattern Dispose, e quando ho appena digitato la riga GC.SuppressFinalize(this), mi chiedevo se c'è mai stato un caso d'uso per usare qualcosa di diverso da this come parametro del metodo.Esiste un caso di utilizzo per non utilizzare "this" quando si chiama GC.SuppressFinalize (this)?

Questo è il modello tipico:

public void Dispose() 
{ 
    Dispose(true); 
    GC.SuppressFinalize(this); // right here 
} 

Ha mai ha senso chiamare GC.SuppressFinalize() con qualcosa di diverso this?

public void Dispose() 
{ 
    Dispose(true); 
    GC.SuppressFinalize(foo); // should this ever happen? 
} 
+9

L'unica volta che ho potuto immaginare che sia utile è se si utilizza una classe di terze parti che ha un finalizzatore e un metodo Dispose() ma non chiama 'GC.SuppressFinalize()' stesso per qualche motivo. Quindi potresti teoricamente risolvere il problema chiamando SuppressFinalize() per l'oggetto esplicity dopo aver chiamato Dispose() per esso. Ma sembra piuttosto inverosimile. –

+2

Ovviamente ci sono usi, solo non molto comuni. In cose come un pool di oggetti. Ma non è una buona domanda per SO. –

+1

Non ci sono molti scenari. Sempre secondo la domanda sulla barra laterale (quando dovrei usare GC.SupressFinalize()?), La risposta in alto dice | Non essere tentato di chiamare SuppressFinalize su altri oggetti. Questo è un difetto grave in attesa di accadere –

risposta

2

Secondo MSDN:

http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspx

E 'infatti possibile che il vostro esempio: GC.SuppressFinalize (foo) saranno utilizzati in alcuni scenari, ma non nello scenario del modello di smaltimento comune.

Nell'esempio si potrebbe voler scrivere una sorta di modello di gestione di disposi- zione per molti oggetti invece di implementare il modello di disposizione comune all'interno dell'oggetto. un'altra opzione è se vuoi che un oggetto rimanga soppresso e poi lo richieda? mai fatto .. ma è possibile

Quindi possibile sì .. probabile che accada no - e probabilmente mai.

Problemi correlati