正确处理基类的方法?

时间:2018-01-05 20:09:02

标签: c# .net

我知道这个问题之前可能已经得到了回答,但我无法为我的生活找到一个问题,这个问题已经得到了回答。

我有两个类,我称之为处理其中一个,我只是想知道我是否必须在A的处置中明确调用B类上的dispose?或者它会自动执行它,因为它已经是A的基类?

它让我如此关注的原因是Resharper(A vs扩展版)不断给我一个指示它的信息。

  

' A.Dispose()'隐藏继承的成员' B.Dispose()',如果要隐藏,请使用new关键字。关键字' new'需要处理' Dispose'因为它隐藏了方法' void App.B.Dispose()'

class A : B, IDisposable
{
    public void Dispose() {
    }
}

class B : IDisposable
{
    public void Dispose() {
    }
}

1 个答案:

答案 0 :(得分:-1)

您可以在基类中将IDisposable实现为虚拟,但这违反了Liskov替换原则。如果您需要派生类自行处理,您应该执行以下操作:

internal abstract class B : IDisposable
{
    public void Dispose()
    {
        DisposeImpl();
    }

    protected abstract void DisposeImpl();
}

internal sealed class A : B
{
    protected override void DisposeImpl()
    {
        //TODO.
    }
}