2

假设您有以下继承链:

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)

4

2 回答 2

4

您应该覆盖,而不是隐藏

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);
    }
}
于 2013-08-14T14:23:23.030 回答
3

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

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

于 2013-08-14T14:21:34.213 回答