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)
?
您应该覆盖,而不是隐藏:
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
方法,这两个方法都没有参数(它们不能按返回类型或访问器区分)。