假设您拥有以下继承链:
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)
?
答案 0 :(得分:3)
它应该使用override
声明它。如果它声明使用virtual
而不是override
,那么隐藏 A.Dispose
。
顺便说一下,你不能在Dispose
中声明两个A
方法,两者都没有参数(它们不能通过返回类型或访问者来区分)。
答案 1 :(得分:3)
您应覆盖,而不是隐藏:
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);
}
}