CA2215: Dispose methods should call base class dispose
Visual Studio 2012
|
TypeName |
DisposeMethodsShouldCallBaseClassDispose |
|
CheckId |
CA2215 |
|
Category |
Microsoft.Usage |
|
Breaking Change |
Non Breaking |
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.
It is safe to suppress a warning from this rule if the call to base.Dispose occurs at a deeper calling level than the rule checks.
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 Protected Overrides Sub Finalize() Try Dispose(False) Finally MyBase.Finalize() End Try End Sub End Class End Namespace