CA2225: Sobrecargas 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 denominado 'Adicionar'.O membro alternativo nomeado 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 resto |
%= |
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 |
False |
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 de que essa 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 relatório público Add(int x, int y) método na 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 equals em tipos de referência
CA2226: Os operadores devem ter a sobrecargas simétricas
CA2224: É igual a substituição na sobrecarga de operador equals
CA2218: GetHashCode de substituição em substituição Equals
CA2231: Sobrecarga de operador é igual a sobre a anulação de ValueType.Equals