CA2216: Los tipos descartables deben declarar el finalizador
TypeName |
DisposableTypesShouldDeclareFinalizer |
Identificador de comprobación |
CA2216 |
Categoría |
Microsoft.Usage |
Cambio problemático |
No |
Motivo
Un tipo que implementa IDisposable y tiene campos que sugieren el uso de recursos no administrados, no implementa un finalizador descrito por Object.Finalize.
Descripción de la regla
Se crea informe relativo a una infracción de esta regla si el tipo disponible contiene campos de los tipos siguientes:
Cómo corregir infracciones
Para corregir una infracción de esta regla, implemente un finalizador que llama a su método Dispose.
Cuándo suprimir advertencias
Es seguro suprimir una advertencia de esta regla si el tipo no implementa IDisposable con el propósito de liberar los recursos no administrados.
Ejemplo
El siguiente ejemplo muestra un tipo que infringe esta regla.
using System;
using System.Runtime.InteropServices;
namespace UsageLibrary
{
public class DisposeMissingFinalize :IDisposable
{
private bool disposed = false;
private IntPtr unmanagedResource;
[DllImport("native.dll")]
private static extern IntPtr AllocateUnmanagedResource();
[DllImport("native.dll")]
private static extern void FreeUnmanagedResource(IntPtr p);
DisposeMissingFinalize()
{
unmanagedResource = AllocateUnmanagedResource();
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
// Dispose of resources held by this instance.
FreeUnmanagedResource(unmanagedResource);
disposed = true;
// Suppress finalization of this disposed instance.
if (disposing)
{
GC.SuppressFinalize(this);
}
}
}
public void Dispose()
{
Dispose(true);
}
// Disposable types with unmanaged resources implement a finalizer.
// Uncomment the following code to satisfy rule:
// DisposableTypesShouldDeclareFinalizer
// ~TypeA()
// {
// Dispose(false);
// }
}
}
Reglas relacionadas
CA2115: Llamar a GC.KeepAlive cuando se utilicen recursos nativos
CA1816: Llamar a GC.SuppressFinalize correctamente
CA1049: Los tipos que poseen recursos nativos deben ser descartables