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.