CA2260: implementar interfaces matemáticas genéricas corretamente
Property | Valor |
---|---|
ID da regra | CA2260 |
Título | Implementar interfaces matemáticas genéricas corretamente |
Categoria | Usage |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como aviso |
Causa
Essa regra é acionada quando você implementa uma interface matemática genérica que requer um parâmetro de tipo recorrente e não passa o tipo em si como o parâmetro de tipo.
Descrição da regra
Algumas interfaces matemáticas genéricas introduzem membros abstratos estáticos. A única maneira de acessar esses membros estáticos é por meio de uma restrição genérica que implementa o CRTP ("padrão de modelo curiosamente recorrente"). Portanto, o próprio tipo derivado deve ser usado como parâmetro de tipo recorrente. Se um tipo implementar essa interface sem passar o parâmetro de tipo necessário e a regra CA2260 for ignorada, o código será compilado com êxito, mas o resumo estático não ficará acessível. Portanto, o tipo não será utilizável. O compilador emite um aviso com a ID CS0315 nesse uso.
Como corrigir violações
Passe o parâmetro de tipo correto para o parâmetro de tipo 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 tipo MyDate
como o parâmetro de tipo para a interface IParsable<TSelf>
.
using System;
// No warning
public readonly struct MyDate : IParsable<MyDate>
{ ... }
Quando suprimir erros
Não suprima um aviso nessa regra.