Le modèle .NET IDisposable implique que si vous écrivez un finaliseur et implémentez IDisposable, votre finaliseur doit appeler explicitement Dispose. C'est logique, et c'est ce que j'ai toujours fait dans les rares situations où un finaliseur est justifié.
Cependant, que se passe-t-il si je fais juste ceci:
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
et n'implémentez pas de finaliseur ou quoi que ce soit. Le framework appellera-t-il la méthode Dispose pour moi?
Oui, je réalise que cela semble stupide, et toute logique implique que ce ne sera pas le cas, mais j'ai toujours eu 2 choses à l'arrière de la tête qui m'ont rendu incertain.
Quelqu'un, il y a quelques années, m'a dit une fois qu'il le ferait en fait, et cette personne avait une expérience très solide de «connaître leurs affaires».
Le compilateur / framework fait d'autres choses «magiques» en fonction des interfaces que vous implémentez (par exemple: foreach, méthodes d'extension, sérialisation basée sur des attributs, etc.), il est donc logique que cela puisse être aussi «magique».
Bien que j'aie lu beaucoup de choses à ce sujet, et qu'il y ait eu beaucoup de choses implicites, je n'ai jamais été en mesure de trouver un réponse définitive par oui ou par non à cette question.