Czy istnieje sposób "automatycznego" uruchomienia kodu finalizacji/destruktora, gdy tylko zmienna traci zasięg w języku .Net? Wydaje mi się, że ponieważ garbage collector działa w nieokreślonym czasie, kod destruktora nie jest uruchamiany, gdy zmienna traci zasięg. Zdaję sobie sprawę, że mógłbym dziedziczyć z IDisposable i jawnie wywoływać Dispose na moim obiekcie, ale miałem nadzieję, że może istnieć bardziej praktyczne rozwiązanie, podobne do sposobu, w jaki nie-sieć C++ radzi sobie z niszczeniem obiektów.Czy kod może być uruchamiany, gdy obiekt znajdzie się poza zakresem w .Net?
pożądanego zachowania (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();
}
mniej pożądane:
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) Warto zauważyć, że "używanie" jest skrótem do wykorzystania metody Dispose, a nie do wykorzystania destruktora i usunięcia obiektu z pamięci. –