CA2215: O 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 é herdada 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 nenhum recurso criado pelo tipo base é liberado.
Como corrigir violações
Para corrigir uma violação desta regra, chame base.Dispose in your Dispose method.
Quando suprimir avisos
É seguro eliminar um aviso esta regra se a chamada para base.Dispose ocorre em um nível de chamada mais profundo que as verificações de 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