只要變量在.Net語言中丟失範圍,是否有任何方法可以「自動」運行終結/析構函數代碼?在我看來,由於垃圾收集器在不確定的時間運行,析構函數代碼不會在變量失去作用域時立即運行。我意識到我可以從IDisposable繼承,並在我的對象上顯式調用Dispose,但我希望可能會有更多的解決方案,類似於non.Net C++處理對象銷燬的方式。當.NET中的對象超出範圍時,可以運行代碼嗎?
期望的行爲(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();
}
不太理想的:
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)很好地注意「using」是使用Dispose方法的簡寫,特別是不用於使用析構函數並從內存中刪除對象。 – 2009-09-14 19:36:06