Existe-t-il un moyen d'exécuter "automatiquement" le code de finalisation/destructeur dès qu'une variable perd la portée dans un langage .Net? Il me semble que puisque le garbage collector s'exécute à une heure indéterminée, le code destructeur n'est pas exécuté dès que la variable perd la portée. Je me suis rendu compte que je pouvais hériter de IDisposable et appeler explicitement Dispose sur mon objet, mais j'espérais qu'il pourrait y avoir une solution plus maniable, similaire à la façon dont non.Net C++ gère la destruction d'objets.Le code peut-il être exécuté lorsqu'un objet tombe hors de la portée dans .Net?
Comportement souhaité (C#):
public class A {
~A { [some code I would like to run] }
}
public void SomeFreeFunction() {
SomeFreeSubFunction();
// At this point, I would like my destructor code to have already run.
}
public void SomeFreeSubFunction() {
A myA = new A();
}
Moins souhaitable:
public class A : IDisposable {
[ destructor code, Dispose method, etc. etc.]
}
public void SomeFreeFunction() {
SomeFreeSubFunction();
}
public void SomeFreeSubFunction() {
A myA = new A();
try {
...
}
finally {
myA.Dispose();
}
}
(+1) Il est bon de noter que "using" est un raccourci pour utiliser la méthode Dispose et spécifiquement pas pour utiliser le destructeur et retirer l'objet de la mémoire. –