Gibt es eine Möglichkeit, Finalisierungs-/Destruktorcode "automatisch" auszuführen, sobald eine Variable den Umfang in einer .Net-Sprache verliert? Es scheint mir, dass der Destruktorcode nicht ausgeführt wird, sobald der Garbage Collector zu einem unbestimmten Zeitpunkt ausgeführt wird, sobald die Variable den Gültigkeitsbereich verliert. Mir ist klar, dass ich von IDisposable erben und explizit Dispose für mein Objekt aufrufen könnte, aber ich hatte gehofft, dass es eine Lösung mit mehr Händen geben könnte, ähnlich wie non.Net C++ die Objektzerstörung behandelt.Kann Code ausgeführt werden, wenn ein Objekt in .Net aus dem Gültigkeitsbereich fällt?
Wunschverhalten (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();
}
Weniger wünschenswert:
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) Gut zu wissen, dass "verwenden" eine Abkürzung für die Verwendung der Dispose-Methode ist und nicht für die Verwendung des Destruktors und das Entfernen des Objekts aus dem Speicher. –