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.