Partilhar via


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 8 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 tipo como o MyDate 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.

Consulte também