使用IDisposable
时,我经常使用一个抽象的基类,因为实现它非常困难。主要是因为您可以使用接口来处理管理和非托管引用,每个引用的处理方式都不同。
public abstract class Disposable : IDisposable
{
~Disposable() => this.Dispose(false);
public bool IsDisposed { get; private set; }
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void DisposeManaged() {}
protected virtual void DisposeUnmanaged() {}
protected void ThrowIfDisposed()
{
if (this.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
}
private void Dispose(bool disposing)
{
if (!this.IsDisposed)
{
if (disposing)
{
this.DisposeManaged();
}
this.DisposeUnmanaged();
this.IsDisposed = true;
}
}
}
使用IAsyncDisposable
,我找不到一个参考实现。此外,我认为它主要处理托管资源,因为它太新了,没有需要异步处理的非托管资源。如果是这样的话,那么实现是否简单?