我有几个问题,我无法得到正确的答案.
1)当我们没有析构函数时,为什么我们应该在Dispose函数中调用SuppressFinalize.
2)Dispose和finalize用于在对象被垃圾收集之前释放资源.无论是托管资源还是非托管资源我们都需要释放它,那么为什么我们需要在dispose函数中使用一个条件,当我们从IDisposable调用这个重写函数时传递'true':从finalize调用时Dispose并传递false.
请参阅我从网上复制的以下代码.
class Test : IDisposable
{
private bool isDisposed = false;
~Test()
{
Dispose(false);
}
protected void Dispose(bool disposing)
{
if (disposing)
{
// Code to dispose the managed resources of the class
}
// Code to dispose the un-managed resources of the class
isDisposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除布尔保护的Dispose函数并实现如下所示.
class Test : IDisposable
{
private bool isDisposed = false;
~Test()
{
Dispose();
}
public void Dispose()
{
// Code …Run Code Online (Sandbox Code Playgroud)