简单的问题。类析构函数和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.
}
}
答案 0 :(得分:1)
差异:您无法明确调用析构函数。当您的对象超出范围或程序退出时,它将自动调用。
Dispose是一种方法,您可以在其上单独编写,以便在您的对象中处理托管和非托管资源,或者在实现IDisposable接口时可用。您可以随时调用它来清除资源。
关于您的问题。理想情况下,您应该在Dispose方法中处理任何非托管资源明确性。但是你也可以在Destructor中调用相同的方法(作为一种预防措施),因为GC不会处理这些问题。除非你明确地将它们丢弃,否则它们将留在记忆中。
注意:如果您决定从Destructor和Dispose中调用相同的方法,那么在对要处置的方法调用dispose之前,请检查该对象是否已经处理过。
您可以阅读有关析构函数here
的更多信息