有没有办法在对象被销毁时运行一些代码?

时间:2011-10-02 16:26:03

标签: c# .net pointers garbage-collection

在C#中我知道我的对象在超出范围时会被垃圾收集,并且没有更多的指针/引用。有没有办法在发生垃圾收集时运行一些自定义代码?

4 个答案:

答案 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~)方法。

MSDN - Object.Finalize

答案 3 :(得分:0)

在C#中没有等效的析构函数 - 你可以做的最好的事情就是添加一个finalizer(具有析构函数语法),然后在GC通常收集时调度在专用的终结器线程上执行您的对象 - 这确实会导致额外的开销,并使您的对象实例保持活动的时间长于应有的时间。仔细考虑用例。