在C#中我知道我的对象在超出范围时会被垃圾收集,并且没有更多的指针/引用。有没有办法在发生垃圾收集时运行一些自定义代码?
答案 0 :(得分:5)
是的,它被称为终结器。 http://msdn.microsoft.com/en-us/library/wxad3cah.aspx
许多C#文档令人困惑地使用术语“析构函数”。虽然析构函数的C ++命名在C#中用于终结器,但语义完全不同。如果你一直使用 finalizer 这个词,就不会有任何混淆。
答案 1 :(得分:1)
是。您可以为班级定义终结器:
class Lava
{
~Lava() // Finalizer -- runs when object is collected
{
// TODO: Clean up molten rock
}
}
答案 2 :(得分:0)
您可以使用Finalizer/Destructor
(~
)方法。
答案 3 :(得分:0)
在C#中没有等效的析构函数 - 你可以做的最好的事情就是添加一个finalizer(具有析构函数语法),然后在GC通常收集时调度在专用的终结器线程上执行您的对象 - 这确实会导致额外的开销,并使您的对象实例保持活动的时间长于应有的时间。仔细考虑用例。