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

时间:2013-07-26 06:46:25

标签: c# destructor dispose

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

1 个答案:

答案 0 :(得分:1)

差异:您无法明确调用析构函数。当您的对象超出范围或程序退出时,它将自动调用。

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

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

注意:如果您决定从Destructor和Dispose中调用相同的方法,那么在对要处置的方法调用dispose之前,请检查该对象是否已经处理过。

您可以阅读有关析构函数here

的更多信息