小编qua*_*con的帖子

是否真的只需要为托管资源实现处置模式?

我已经仔细阅读了这篇文章,并且似乎清楚地指出了在所有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)

.net c# dispose idisposable finalizer

3
推荐指数
2
解决办法
136
查看次数

标签 统计

.net ×1

c# ×1

dispose ×1

finalizer ×1

idisposable ×1