CA2260: Implementar interfaces matemáticas genéricas corretamente
Property | valor |
---|---|
ID da regra | CA2260 |
Título | Implementar interfaces matemáticas genéricas corretamente |
Categoria | Utilização |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 9 | Como aviso |
Motivo
Esta regra é acionada quando você implementa uma interface matemática genérica que requer um parâmetro de tipo autorecorrente e não passa o próprio tipo como o parâmetro type.
Descrição da regra
Algumas interfaces matemáticas genéricas introduzem membros abstratos estáticos. A única maneira de acessar esses membros estáticos é através de uma restrição genérica que implementa o "padrão de modelo curiosamente recorrente" (CRTP). Portanto, o próprio tipo derivado deve ser usado para o parâmetro de tipo auto-recorrente. Se um tipo implementar tal interface sem passar o parâmetro de tipo necessário e CA2260 for ignorado, o código será compilado com êxito, mas o resumo estático não estará acessível. Assim, o tipo não será utilizável. O compilador emite um aviso com ID CS0315 sobre tal uso.
Como corrigir violações
Passe o parâmetro de tipo correto para o parâmetro de tipo auto-recorrente (TSelf) ao implementar essas interfaces.
Exemplo
Violação:
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>
{ ... }
Correção:
Passe o MyDate
tipo como o parâmetro type para a IParsable<TSelf>
interface.
using System;
// No warning
public readonly struct MyDate : IParsable<MyDate>
{ ... }
Quando suprimir erros
Não suprima um aviso desta regra.