-1

简单的问题。类析构函数和 dispose 有什么区别。假设在我的类中,我有一个 RegistryKey、一个 COM 对象和一些在类对象超出范围时需要处理的东西。我有执行此操作的代码,并且我已将其放在析构函数和 dispose 方法中。在这里使用什么是最好的。

public MyClass : IDisposable
{
    public ICOMObject SomeCOMObject;
    public RegistryKey registryKey;

    MyClass()
    { Initialize things; }

    ~MyClass()
    {
        ClearThings();
    }

    public void Dispose()
    {
        ClearThings();
    }

    private void ClearThings()
    {
        // Clear things.
    }
}
4

1 回答 1

1

区别: 您不能显式调用析构函数。当您的对象超出范围或程序退出时,它将自动调用。

Dispose 是一种您可以控制的方法,可以单独编写以释放对象中的托管和非托管资源,或者在您实现 IDisposable 接口时可用。您可以随时调用它来清理资源。

关于你的问题。理想情况下,您应该在 Dispose 方法中显式处理任何非托管资源。但是您也可以在 Destructor 中调用相同的方法(作为预防措施),因为 GC 不会处理这些。除非您明确地处理掉它们,否则它们将保留在内存中。

注意:如果您决定从 Destructor 和 Dispose 调用相同的方法,那么在对您正在处理的方法调用 dispose 之前,请检查对象是否尚未被释放。

您可以在此处阅读有关析构函数的更多信息

于 2013-07-26T06:52:47.473 回答