我已经仔细阅读了这篇文章,并且似乎清楚地指出了在所有IDisposable实施情况下都应该实施处置模式。我试图理解为什么在我的班级仅持有托管资源(即其他IDisposable成员或安全句柄)的情况下需要实现处置模式的原因。为什么我不能写
class Foo : IDisposable
{
IDisposable boo;
void Dispose()
{
boo?.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
如果可以肯定地知道没有非托管资源,并且没有指向Dispose终结器调用方法的信息,因为托管资源没有从终结器中释放出来?
更新:为了增加一些清晰度。讨论似乎归结为以下问题:是否需要为每个实现的基础公共非密封类实现处置模式IDisposable。但是,当没有非托管资源的基类不使用dispose模式而具有非托管资源的子类确实使用此模式时,我找不到层次结构的潜在问题:
class Foo : IDisposable
{
IDisposable boo;
public virtual void Dispose()
{
boo?.Dispose();
}
}
// child class which holds umanaged resources and implements dispose pattern
class Bar : Foo
{
bool disposed;
IntPtr unmanagedResource = IntPtr.Zero;
~Bar()
{
Dispose(false);
}
public override void Dispose()
{
base.Dispose();
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void …Run Code Online (Sandbox Code Playgroud)