Compartir vía


CA2015: Do not define finalizers for types derived from MemoryManager<T> (No definir finalizadores para los tipos derivados de MemoryManager<T>)

Propiedad Value
Identificador de la regla CA2015
Título No definir finalizadores para los tipos derivados de MemoryManager<T>
Categoría Confiabilidad
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como advertencia

Causa

Se han derivado finalizadores para los tipos derivados de MemoryManager<T>.

Descripción de la regla

Agregar un finalizador a un tipo derivado de MemoryManager<T> es probable que se trate de un error, ya que sugiere que un recurso nativo que podría haberse entregado en una Span<T> se está limpiando y posiblemente aún lo esté usando Span<T>.

Nota

La clase MemoryManager<T> está pensada para escenarios avanzados. La mayoría de los desarrolladores no necesitan usarlo.

Cómo corregir infracciones

Para corregir la infracción, quite la definición del finalizador.

class DerivedClass <T> : MemoryManager<T>
{
    public override bool Dispose(bool disposing)
    {
        if (disposing)
        {
            _handle.Dispose();
        }
    }

    ...

    // Violation occurs, remove the finalizer to fix the warning.
    ~DerivedClass() => Dispose(false);
}

Cuándo suprimir las advertencias

Es seguro suprimir una infracción de esta regla si el objetivo es crear un finalizador con fines de depuración o validación.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

#pragma warning disable CA2015
// The code that's violating the rule is on this line.
#pragma warning restore CA2015

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

[*.{cs,vb}]
dotnet_diagnostic.CA2015.severity = none

Para deshabilitar toda esta categoría de reglas, establezca la gravedad de la categoría en none del archivo de configuración.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Consulte también