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ます。virtualの代わりにusingを宣言するoverrideと、.A.Dispose

ちなみに、Dispose内で 2 つのメソッドを宣言することはできませんA。どちらもパラメーターなしで宣言できます (戻り値の型やアクセサーで区別することはできません)。

于 2013-08-14T14:21:34.213 に答える