Compartir a través de


CA1859: Usar tipos concretos cuando sea posible para mejorar el rendimiento

Propiedad Value
Identificador de la regla CA1859
Título Utilizar tipos de hormigón cuando sea posible para mejorar el rendimiento
Categoría Rendimiento
La corrección es problemática o no problemática Poco problemático
Versión introducida .NET 8
Habilitado de forma predeterminada en .NET 9 Como sugerencia

Causa

El código usa tipos de interfaz o tipos abstractos, lo que genera llamadas virtuales o llamadas de interfaz innecesarias.

Descripción de la regla

Esta regla recomienda actualizar el tipo de variables locales específicas, campos, propiedades, parámetros de método y tipos devueltos de métodos de tipos de interfaz o tipos abstractos a tipos concretos cuando sea posible. El uso de tipos concretos genera un código de mayor calidad al minimizar la sobrecarga de distribución de la interfaz o virtual y habilitar la inserción.

Esta regla solo notifica infracciones cuando hay llamadas virtuales o llamadas de interfaz que realmente se pueden evitar mediante un tipo concreto.

Cómo corregir infracciones

Actualice los tipos según lo que recomiende la regla. En general, cambiar el tipo no tiene ningún efecto en el comportamiento del código, pero mejora su rendimiento.

Ejemplo

El siguiente fragmento de código muestra una infracción de la regla CA1859:

abstract class A
{
    public virtual void M() { }
}

sealed class B : A
{ }

internal class C
{
    private readonly A _a = new B();

    public void Trigger()
    {
        // This performs a virtual call because
        // _a is defined as an abstract class.
        _a.M();
    }
}

El siguiente fragmento de código corrige la infracción:

abstract class A
{
    public virtual void M() { }
}

sealed class B : A
{ }

internal class C
{
    private readonly B _b = new B();

    public void Trigger()
    {
        _b.M();
    }
}

Cuándo suprimir las advertencias

Si el rendimiento no es un problema, es seguro suprimir esta advertencia.

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 CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859

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.CA1859.severity = none

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