Comparteix a través de


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

Propiedad Valor
Identificador de la regla CA2260
Título Implementación correcta de interfaces matemáticas genéricas
Categoría Uso
La corrección interrumpe o no interrumpe Sin interrupción
Habilitado de forma predeterminada en .NET 10 Como advertencia
Idiomas aplicables C#

Causa

Esta regla se activa cuando se implementa una interfaz matemática genérica que requiere un parámetro de tipo auto-recurrente y no se pasa el tipo en sí mismo como el 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

Proporcione el parámetro de tipo correcto para el parámetro de tipo auto-recurrente (TSelf) al implementar estas 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