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.

Confira também