我知道这个问题之前可能已经得到了回答,但我无法为我的生活找到一个问题,这个问题已经得到了回答。
我有两个类,我称之为处理其中一个,我只是想知道我是否必须在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() {
}
}
答案 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.
}
}