CA2215: Los métodos Dispose deben llamar a Dispose de clase base
Nombre de tipo |
DisposeMethodsShouldCallBaseClassDispose |
Identificador de comprobación |
CA2215 |
Categoría |
Microsoft.Usage |
Cambio problemático |
No |
Motivo
Un tipo que implementa System.IDisposable hereda de un tipo que también implementa IDisposable.El método Dispose del tipo heredado no llama al método Dispose del tipo primario.
Descripción de la regla
Si un tipo hereda de un tipo disponible, debe llamar al método Dispose del tipo base desde su propio método Dispose.Llamar al método de tipo base Dispone asegura que se liberan los recursos creados por el tipo base.
Cómo corregir infracciones
Para corregir una infracción de esta regla, llame a base.Dispose desde su método Dispose.
Cuándo suprimir advertencias
Se puede suprimir de forma segura una advertencia de esta regla si la llamada a base.Dispose se produce en un nivel de llamada más profundo que el de las comprobaciones de la regla.
Ejemplo
El ejemplo siguiente muestra un tipo TypeA que implementa 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);
}
}
}
El ejemplo siguiente muestra un tipo TypeB que hereda del tipo TypeA y llama correctamente a su método Dispose.
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