然而,通常对于“我应该…”这样的问题的答案是“不要使用析构函数,而是使用MSDN中所示的释放模式”。Eric Lippert 写道强烈反对不必要地使用析构函数。
但是,这个“模式”建议编写一个析构函数,如下所示:
~T() { Dispose(false); }
。其声明的原因是作为“后备”,以防程序员忘记调用Dispose()
。当然,这忽略了终结器在操作上是不确定的,并且可能根本不会运行。因此:
如果我使用dispose模式,我是否也应该提供析构函数?顺便说一下,我只处理托管资源(例如Entity Framework的
DataContext
)。如果我提供一个析构函数:如果我的类是从
IDisposable
派生的,而IDisposable
可能已经提供了一个析构函数,那么我是否也应该提供一个析构函数?我认为在这种情况下永远不会编写析构函数,但是文档说它将自动调用基类的析构函数。
IDisposable
,但是“参考实现”在这些情况下并不适用。 - Reed Copsey