Dispose methods should call base class dispose
TypeName |
DisposeMethodsShouldCallBaseClassDispose |
CheckId |
CA2215 |
Category |
Microsoft.Usage |
Breaking Change |
NonBreaking |
Cause
A type that implements System.IDisposable inherits from a type that also implements IDisposable. The Dispose method of the inheriting type does not call the Dispose method of the parent type.
Rule Description
If a type inherits from a disposable type, it must call the Dispose method of the base type from within its own Dispose method.
How to Fix Violations
To fix a violation of this rule, call base.Dispose in your Dispose method.
When to Exclude Warnings
It is safe to exclude a warning from this rule if the call to base.Dispose occurs at a deeper calling level than the rule checks.
Example
The following example shows a type TypeA
that implements IDisposable.
using System;
namespace UsageLibrary
{
public class TypeA :IDisposable
{
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// Dispose managed resources
}
// Free native resources
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Disposable types implement a finalizer.
~TypeA()
{
Dispose(false);
}
}
}
The following example shows a type TypeB
that inherits from type TypeA
and correctly calls its Dispose method.
Imports System
Namespace UsageLibrary
Public Class TypeB
Inherits TypeA
Friend Overrides Sub Dispose(ByVal disposing As Boolean)
Try
Dispose(False)
Finally
MyBase.Finalize()
End Try
End Sub 'Dispose
End Class 'TypeB
End Namespace
See Also
Reference
Implementing Finalize and Dispose to Clean Up Unmanaged Resources
System.IDisposable