Compartir a través de


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

Causa

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

Vea también

Referencia

Implementar Finalize y Dispose para limpiar recursos no administrados

System.IDisposable