具有多个继承级别的IDisposable

时间:2013-08-14 14:16:35

标签: c# .net oop

假设您拥有以下继承链:

class A : IDisposable
{
    public void Dispose()...
    protected virtual void Dispose(bool disposing)...
}

class B : A
{
    // Virtual or Override for B?
}

class C : B
{
    protected override void Dispose(bool disposing)...
}

如果A,B和C都有自己的私有IDisposable资源,B应如何声明Dispose(bool)

2 个答案:

答案 0 :(得分:3)

它应该使用override声明它。如果它声明使用virtual而不是override,那么隐藏 A.Dispose

顺便说一下,你不能在Dispose中声明两个A方法,两者都没有参数(它们不能通过返回类型或访问者来区分)。

答案 1 :(得分:3)

您应覆盖,而不是隐藏

class A : IDisposable
{
    public void Dispose() {
      Dispose(true);
      GC.SuppressFinalize(this); // <- May be excluded
    }

    protected virtual void Dispose(Boolean disposing)... // <- "disposing" recommended by Microsoft
}

class B : A
{
    protected override void Dispose(Boolean disposing) {
      // Dispose here all private resources of B
      ...
      base.Dispose(disposing);
    }
}

class C : B
{
    protected override void Dispose(Boolean disposing) {
      // Dispose here all private resources of C
      ...
      base.Dispose(disposing);
    }
}