CA2260: Implementación correcta de las interfaces matemáticas genéricas

Propiedad Value
Identificador de la regla CA2260
Título Implementación correcta de interfaces matemáticas genéricas
Categoría Uso
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como advertencia

Causa

Esta regla se desencadena cuando se implementa una interfaz matemática genérica que requiere un parámetro de tipo autoperiódico y no se pasa el propio tipo como parámetro de tipo.

Descripción de la regla

Algunas interfaces matemáticas genéricas presentan miembros abstractos estáticos. La única manera de acceder a esos miembros estáticos es mediante una restricción genérica que implemente el "patrón de plantilla curiosamente recurrente" (CRTP). Por lo tanto, debe usarse el propio tipo derivado para el parámetro de tipo autoperiódico. Si un tipo implementa dicha interfaz sin pasar el parámetro de tipo necesario y CA2260 se omite, el código se compila correctamente, pero no se podrá acceder al resumen estático. Por lo tanto, el tipo no se podrá usar. El compilador emite una advertencia con el identificador CS0315 con ese uso.

Cómo corregir infracciones

Pase el parámetro de tipo correcto para el parámetro de tipo auto periódico (TSelf) al implementar esas interfaces.

Ejemplo

Infracción:

using System;

// Warns: The 'IParsable<TSelf>' requires the 'TSelf' type parameter to be filled with the derived type 'MyDate'
public readonly struct MyDate : IParsable<DateOnly>
{ ... }

Corrección:

Pase el tipo MyDate como parámetro de tipo para la interfaz IParsable<TSelf>.

using System;

// No warning
public readonly struct MyDate : IParsable<MyDate>
{ ... }

Cuándo suprimir los errores

No suprima las advertencias de esta regla.

Vea también