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?
}
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. –
Ovviamente ci sono usi, solo non molto comuni. In cose come un pool di oggetti. Ma non è una buona domanda per SO. –
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 –