我有一个关于如何使用Dispose()
和析构函数的问题。阅读一些文章和 MSDN文档,这似乎是推荐的实现Dispose()
和析构函数的方式。
但是我有两个关于这个实现的问题,你可以在下面阅读:
class Testing : IDisposable
{
bool _disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!_disposed) // only dispose once!
{
if (disposing)
{
// Not in destructor, OK to reference other objects
}
// perform cleanup for this object
}
_disposed = true;
}
public void Dispose()
{
Dispose(true);
// tell the GC not to finalize
GC.SuppressFinalize(this);
}
~Testing()
{
Dispose(false);
}
}
GC.SupressFinalize(this) on Dispose()
当程序员using
显式使用或调用 Dispose() 时,我们的类正在调用GC.SupressFinalize(this)
. 我的问题是:
- 这究竟意味着什么?是否会收集对象但不调用析构函数?我想答案是肯定的,因为框架将析构函数转换为 Finalize() 调用,但我不确定。
在没有 Dispose() 调用的情况下完成
假设 GC 将要清理我们的对象但程序员没有调用Dispose()
- 我们为什么不在此时处置资源?换句话说,为什么我们不能在析构函数上释放资源?
if里面必须执行什么代码,外面又是什么?
if (!_disposed) // only dispose once! { if (disposing) { //What should I do here and why? } // And what here and why? }
提前致谢