在.NET中,是否有一种简单的方法可以通知类,因为它超出了范围?
答案 0 :(得分:3)
没有。
如果需要清理内存以外的资源,请实现IDisposable并使用using
块创建对象。如果你需要清理内存,你真的可以把它留给垃圾收集器。
答案 1 :(得分:2)
是的,有些语言。当非堆分配超出范围时,C ++ / CLI将为IDisposable实现者发出Dipose调用(有效地赋予它们与普通C ++中的堆栈分配资源相同的语义)。而且,~Classname的C ++ / CLI析构函数语法成为Dispose的一个实现(并使类实现IDisposable)。
随着时间的推移,我希望其他具有传统确定性破坏的语言能够采用这一政策。正如其他人所提到的,您可以使用“使用”在C#中模拟它,但它并不完全相同。
答案 2 :(得分:1)
如果它实现了IDisposable并且您正在使用using块,请确定。
答案 3 :(得分:0)
不,没有。
答案 4 :(得分:0)
不,任何.NET语言都没有确定性的终结。垃圾收集器负责完成应用程序中没有根的对象。
答案 5 :(得分:0)
如果它实现了IDisposable,你的Dispose()方法会找到:
using (var c = new YourClassImplementsIDisposable() )
{
// Stuff happens
}
// c.Dispose has been called
否则没有,因为你的对象只是“挂出”直到GC
答案 6 :(得分:0)
您可以使用终结器。它会在收集垃圾后调用,但在离开范围后不会立即调用。
http://www.switchonthecode.com/tutorials/csharp-tutorial-object-finalizers