类析构函数和Dispose之间的区别

本文关键字:区别 之间 Dispose 析构函数 | 更新日期: 2023-09-27 18:25:04

简单问题。类析构函数和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.
    }
}

类析构函数和Dispose之间的区别

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

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

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

注意:如果您决定从Destructor和Dispose调用同一个方法,那么在对要处理的方法调用Dispose之前,请检查对象是否已被处理。

你可以在这里阅读更多关于析构函数的信息