El patrón .NET IDisposable implica que si escribe un finalizador e implementa IDisposable, su finalizador debe llamar explícitamente a Dispose. Esto es lógico, y es lo que siempre he hecho en las raras situaciones en las que se justifica un finalizador.
Sin embargo, qué sucede si solo hago esto:
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
y no implemente un finalizador, ni nada. ¿El marco llamará al método Dispose para mí?
Sí, me doy cuenta de que esto suena tonto, y toda lógica implica que no lo hará, pero siempre he tenido 2 cosas detrás de mi cabeza que me han hecho sentir inseguro.
Hace unos años, alguien me dijo que, de hecho, haría esto, y que esa persona tenía un historial muy sólido de "conocer sus cosas".
El compilador / marco hace otras cosas 'mágicas' dependiendo de qué interfaces implemente (por ejemplo: foreach, métodos de extensión, serialización basada en atributos, etc.), por lo que tiene sentido que esto también sea 'mágico'.
Si bien he leído muchas cosas al respecto, y ha habido muchas cosas implícitas, nunca he podido encontrar una respuesta definitiva de Sí o No a esta pregunta.