.NET即时超出范围通知?

时间:2009-05-29 17:22:48

标签: .net scope

在.NET中,是否有一种简单的方法可以通知类,因为它超出了范围?

7 个答案:

答案 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