Suppose you have the following inheritance chain:
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)...
}
If A, B, and C each have their own private IDisposable resources, how should B declare Dispose(bool)
?
You should override, not hide:
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);
}
}