类析构函数和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是一个您可以控制的方法。可以单独编写以处理对象中的托管和非托管资源,或者在实现IDisposable接口时可用。你可以随时调用它来清理资源。
关于您的问题。理想情况下,应该在dispose方法中显式地处理任何非托管资源。但您也可以在Destructor中调用相同的方法(作为预防措施),因为GC不会处理这些问题。除非你明确地处理掉它们,否则它们将保留在内存中。
注意:如果您决定从Destructor和Dispose调用同一个方法,那么在对要处理的方法调用Dispose之前,请检查对象是否已被处理。
你可以在这里阅读更多关于析构函数的信息