CA2225: Sobrecargas de operador nomeou alternativas
TypeName |
OperatorOverloadsHaveNamedAlternates |
CheckId |
CA2225 |
<strong>Categoria</strong> |
Microsoft.Usage |
Alteração significativa |
Não separável |
Causa
Uma sobrecarga de operador foi detectada e o método alternativo nomeado esperado não foi encontrado.
Descrição da regra
Sobrecarga de operador permite o uso de símbolos para representar os 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 de 'Adicionar'. O membro nomeado de alternativo fornece acesso para a mesma funcionalidade que o operador e é fornecido para os desenvolvedores que programam em idiomas que não oferecem suporte a operadores sobrecarregados.
Esta regra examina os operadores listados na tabela a seguir.
C# |
Visual Basic |
C++ |
Nome alternativo |
---|---|---|---|
+ (binário) |
+ |
+ (binário) |
Adicionar |
+= |
+= |
+= |
Adicionar |
& |
And |
& |
BitwiseAnd |
&= |
E = |
&= |
BitwiseAnd |
| |
Ou |
| |
BitwiseOr |
|= |
Ou = |
|= |
BitwiseOr |
-- |
N/A |
-- |
Decréscimo |
/ |
/ |
/ |
Dividir |
/= |
/= |
/= |
Dividir |
== |
= |
== |
Equals |
^ |
Xor |
^ |
Xor |
^= |
XOR = |
^= |
Xor |
> |
> |
> |
Compare |
>= |
>= |
>= |
Compare |
++ |
N/A |
++ |
Incremento |
!= |
<> |
!= |
Equals |
<< |
<< |
<< |
LeftShift |
<<= |
<<= |
<<= |
LeftShift |
< |
< |
< |
Compare |
<= |
<= |
<= |
Compare |
&& |
N/A |
&& |
LogicalAnd |
|| |
N/A |
|| |
LogicalOr |
! |
N/A |
! |
LogicalNot |
% |
Mod |
% |
Mod ou restante |
%= |
N/A |
%= |
Mod |
* (binário) |
* |
* |
Multiplicar |
*= |
N/A |
*= |
Multiplicar |
~ |
Not |
~ |
OnesComplement |
>> |
>> |
>> |
RightShift |
>>= |
N/A |
>>= |
RightShift |
-(binário) |
-(binário) |
-(binário) |
Subtrair |
-= |
N/A |
-= |
Subtrair |
verdadeiro |
IsTrue |
N/A |
IsTrue (propriedade) |
-(unário) |
N/A |
- |
Negar |
+ (unário) |
N/A |
+ |
Plus |
FALSO |
IsFalse |
Falso |
IsTrue (propriedade) |
N/D = = não podem ser sobrecarregados no idioma selecionado.
A regra também verifica os operadores de conversão implícita e explícita em um tipo (SomeType), verificando métodos chamados ToSomeType e FromSomeType.
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, implementar o método alternativo para o operador; o nome usando o nome alternativo recomendado.
Quando suprimir avisos
Não suprimir um aviso da regra, se você estiver implementando uma biblioteca compartilhada. Aplicativos podem ignorar um aviso da regra.
Exemplo
O exemplo a seguir define uma estrutura que viola essa regra. Para corrigir o exemplo, adicionar um público Add(int x, int y) método para a estrutura.
using System;
namespace UsageLibrary
{
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;}}
}
}
Regras relacionadas
CA1046: Não sobrecarregar o operador de equals em tipos de referência
CA2226: Os operadores devem ter sobrecargas simétricas
CA2224: É igual a substituição na sobrecarga de operador equals
CA2218: Substituir GetHashCode na substituição Equals
CA2231: Sobrecarga de operador equals em substituição a ValueType.Equals