CA2215: os métodos de descarte devem chamar o descarte da classe base
TypeName |
DisposeMethodsShouldCallBaseClassDispose |
CheckId |
CA2215 |
Categoria |
Microsoft.Usage |
Alteração Significativa |
Sem Quebra |
Causa
Um tipo que implementa IDisposable herda de um tipo que também implementa IDisposable.O método de Dispose do tipo herdando não chama o método de Dispose do tipo pai.
Descrição da Regra
Se um tipo é herdada de um tipo descartável, deve chamar o método de Dispose do tipo de base de dentro de seu próprio método de Dispose .Chamando o método do tipo de base descartado garante que todos os recursos criados pelo tipo de base sejam liberados.
Como Corrigir Violações
Para corrigir uma violação desta regra, chame base.Dispose em seu método de Dispose .
Quando Suprimir Alertas
É seguro suprimir um aviso dessa regra se a chamada a base.Dispose ocorre no nível mais profundo de chamada das verificações de regra.
Exemplo
O exemplo a seguir mostra um 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);
}
}
}
O exemplo a seguir mostra um tipo TypeB que herda do tipo TypeA corretamente e chama seu método de 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