Il modello IDisposable .NET implica che se si scrive un finalizzatore e si implementa IDisposable, il finalizzatore deve chiamare esplicitamente Dispose. Questo è logico ed è quello che ho sempre fatto nelle rare situazioni in cui un finalizzatore è garantito.
Tuttavia, cosa succede se faccio solo questo:
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
e non implementare un finalizzatore o altro. Il framework chiamerà il metodo Dispose per me?
Sì, mi rendo conto che questo sembra stupido, e tutta la logica implica che non lo farà, ma ho sempre avuto 2 cose nella parte posteriore della mia testa che mi hanno reso incerto.
Qualcuno qualche anno fa una volta mi disse che in realtà avrebbe fatto questo, e quella persona aveva una solida esperienza di "conoscere le loro cose".
Il compilatore / framework fa altre cose "magiche" a seconda delle interfacce che implementate (es: foreach, metodi di estensione, serializzazione basata su attributi, ecc.), Quindi ha senso che anche questa potrebbe essere "magica".
Mentre Ho letto un sacco di cose su di esso, e c'è stato un sacco di cose implicite, non sono mai stato in grado di trovare una definitiva risposta sì o no a questa domanda.