IDisposable具有多个继承级别

本文关键字:继承 IDisposable | 更新日期: 2023-09-27 18:27:36

假设您有以下继承链:

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)

IDisposable具有多个继承级别

您应该覆盖,而不是隐藏

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);
    }
}

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

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