O .NET IDisposable Pattern implica que, se você escrever um finalizador e implementar IDisposable, seu finalizador precisará chamar explicitamente Dispose. Isso é lógico e é o que eu sempre fiz nas raras situações em que um finalizador é garantido.
No entanto, o que acontece se eu apenas fizer isso:
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
e não implemente um finalizador, ou qualquer coisa. A estrutura chamará o método Dispose para mim?
Sim, percebo que isso parece idiota, e toda a lógica implica que não, mas sempre tive duas coisas na parte de trás da minha cabeça que me deixaram insegura.
Alguém, alguns anos atrás, me disse uma vez que, de fato, faria isso, e essa pessoa tinha um histórico muito sólido de "conhecer suas coisas".
O compilador / estrutura faz outras coisas 'mágicas', dependendo de quais interfaces você implementa (por exemplo: foreach, métodos de extensão, serialização baseada em atributos, etc.), por isso faz sentido que também possa ser 'mágico'.
Embora tenha lido muitas coisas sobre o assunto e muitas coisas estejam implícitas, nunca consegui encontrar uma resposta definitiva Sim ou Não a esta pergunta.