CA2225: As sobrecargas do operador nomearam suplentes
Property | valor |
---|---|
ID da regra | CA2225 |
Título | As sobrecargas do operador nomearam suplentes |
Categoria | Utilização |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Não |
Motivo
Uma sobrecarga do operador foi detetada e o método alternativo nomeado esperado não foi encontrado.
Por padrão, essa regra examina apenas tipos visíveis externamente, mas isso é configurável.
Descrição da regra
A sobrecarga do operador permite o uso de símbolos para representar cálculos para um tipo. Por exemplo, um tipo que sobrecarrega o símbolo +
de adição para adição normalmente teria um membro alternativo chamado Add
. O membro alternativo nomeado fornece acesso à mesma funcionalidade que o operador. É fornecido para desenvolvedores que programam em idiomas que não suportam operadores sobrecarregados.
Esta regra examina:
Operadores de elenco implícitos e explícitos em um tipo, verificando os métodos nomeados
To<typename>
eFrom<typename>
.Os operadores listados na tabela a seguir:
C# | Visual Basic | C++ | Nome do método alternativo |
---|---|---|---|
+ (binário) | + | + (binário) | Adicionar |
+= | += | += | Adicionar |
& | And | & | BitwiseE |
&= | E= | &= | BitwiseE |
| | Ou | | | BitwiseOr |
|= | Ou= | |= | BitwiseOr |
-- | N/A | -- | Decréscimo |
/ | / | / | Dividir |
/= | /= | /= | Dividir |
== | = | == | igual a |
^ | Xor | ^ | Xor |
^= | Xor= | ^= | Xor |
> | > | > | Comparar ou Comparar |
>= | >= | >= | Comparar ou Comparar |
++ | N/A | ++ | Incremento |
!= | <> | != | igual a |
<< | << | << | Deslocamento para a esquerda |
<<= | <<= | <<= | Deslocamento para a esquerda |
< | < | < | Comparar ou Comparar |
<= | <= | <= | Comparar ou Comparar |
&& | N/A | && | LógicoE |
|| | N/A | || | LógicoOu |
! | N/A | ! | LógicoNão |
% | Mod | % | Mod ou Restante |
%= | N/A | %= | Mod |
* (binário) | * | * | Multiplicar |
*= | N/A | *= | Multiplicar |
~ | Not | ~ | OnesComplemento |
>> | >> | >> | Deslocamento para a direita |
>>= | N/A | >>= | Deslocamento para a direita |
- (binário) | - (binário) | - (binário) | Subtract |
-= | N/A | -= | Subtract |
verdadeiro | IsTrue | N/A | IsTrue (Propriedade) |
- (unário) | N/A | - | Negate |
+ (unário) | N/A | + | Sinal de adição |
false | IsFalse | False | IsTrue (Propriedade) |
*N/D significa que o operador não pode ser sobrecarregado no idioma selecionado.
Nota
Em C#, quando um operador binário está sobrecarregado, o operador de atribuição correspondente, se houver, também é implicitamente sobrecarregado.
Como corrigir violações
Para corrigir uma violação desta regra, implemente o método alternativo para o operador. Nomeie-o usando o nome alternativo recomendado.
Quando suprimir avisos
Não suprima um aviso desta regra se estiver implementando uma biblioteca compartilhada. Os aplicativos podem ignorar um aviso dessa regra.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable CA2225
// The code that's violating the rule is on this line.
#pragma warning restore CA2225
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA2225.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Configurar código para análise
Use a opção a seguir para configurar em quais partes da sua base de código executar essa regra.
Você pode configurar essa opção apenas para esta regra, para todas as regras às quais ela se aplica ou para todas as regras nesta categoria (Uso) às quais ela se aplica. Para obter mais informações, consulte Opções de configuração da regra de qualidade de código.
Incluir superfícies de API específicas
Você pode configurar em quais partes da sua base de código executar essa regra, com base em sua acessibilidade. Por exemplo, para especificar que a regra deve ser executada somente na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig em seu projeto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Exemplo
O exemplo a seguir define uma estrutura que viola essa regra. Para corrigir o exemplo, adicione um método público Add(int x, int y)
à estrutura.
public struct Point
{
private int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
public override string ToString()
{
return String.Format("({0},{1})", x, y);
}
// Violates rule: OperatorOverloadsHaveNamedAlternates.
public static Point operator +(Point a, Point b)
{
return new Point(a.x + b.x, a.y + b.y);
}
public int X { get { return x; } }
public int Y { get { return x; } }
}