Le programme .NET IDisposable Pattern implique que si vous écrivez un finaliseur et que vous 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 simplement ceci :
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
et n'implémente pas de finaliseur, ou quoi que ce soit d'autre. Le framework appellera-t-il la méthode Dispose pour moi ?
Oui, je suis conscient que cela semble stupide et que toute logique implique que ce ne sera pas le cas, mais j'ai toujours eu deux choses à l'esprit qui m'ont rendu incertain.
-
Il y a quelques années, quelqu'un m'a dit que c'était effectivement le cas, et cette personne avait de très bons antécédents en matière de connaissances.
-
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 les attributs, etc), il est donc logique que cela soit "magique" aussi.
Bien que j'aie lu beaucoup de choses à ce sujet, et que beaucoup de choses aient été sous-entendues, je n'ai jamais été en mesure de trouver une définitif Réponse par oui ou par non à cette question.