CA2215: Métodos Dispose devem chamar dispose de classe base

TypeName

DisposeMethodsShouldCallBaseClassDispose

CheckId

CA2215

<strong>Categoria</strong>

Microsoft.Usage

Alteração significativa

Não separável

Causa

Um tipo que implementa System.IDisposable herda a partir de um tipo que implementa também IDisposable. O Dispose não chama o método do tipo herdando o Dispose o método do tipo pai.

Descrição da regra

Se um tipo herda a partir de um tipo descartável, ele deve chamar o Dispose o método do tipo base em seu próprio Dispose método. Chamando o método do tipo base Dispose que garante que todos os recursos criados pelo tipo de base são liberados.

Como corrigir violações

Para corrigir uma violação desta regra, chamada base.Dispose no seu Dispose método.

Quando suprimir avisos

É seguro eliminar um aviso esta regra se a chamada para base.Dispose ocorre em um nível mais profundo de chamada verificações da regra.

Exemplo

O exemplo a seguir mostra um tipo de 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);
        }
    }
}

O exemplo a seguir mostra um tipo de TypeB que herda do tipo TypeA e chama corretamente seu Dispose método.

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

Consulte também

Referência

Implementando finalizar e Dispose para limpeza de recursos não gerenciados

System.IDisposable