CA2225: as sobrecargas do operador têm alternativas nomeadas
TypeName |
OperatorOverloadsHaveNamedAlternates |
CheckId |
CA2225 |
Categoria |
Microsoft.Usage |
Alteração Significativa |
Sem Quebra |
Causa
Uma sobrecarga do operador foi detectada, e o método backup denominado esperado não foi encontrado.
Descrição da Regra
O sobrecarregamento de operador permite o uso dos símbolos representar computações para um tipo.Por exemplo, um tipo que sobrecarregasse o símbolo de adição (+) para a adição teria normalmente um membro de backup denominado “adicionar”.O membro de backup denominado fornece acesso à mesma funcionalidade que o operador, e é fornecido para os desenvolvedores de programação nos idiomas que não dão suporte a operadores sobrecarregados.
Esta regra verifica os operadores listados na tabela a seguir.
C# |
Visual Basic |
C++ |
Nome alternativo |
---|---|---|---|
+ (binário) |
+ |
+ (binário) |
Adicionar |
+= |
+= |
+= |
Adicionar |
& |
And |
& |
BitwiseAnd |
&= |
And= |
&= |
BitwiseAnd |
| |
Or |
| |
BitwiseOr |
|= |
Or= |
|= |
BitwiseOr |
-- |
N/D |
-- |
Redução |
/ |
/ |
/ |
Divisão |
/= |
/= |
/= |
Divisão |
== |
= |
== |
Equals |
^ |
Xor |
^ |
Xor |
^= |
Xor= |
^= |
Xor |
> |
> |
> |
Comparar |
>= |
>= |
>= |
Comparar |
++ |
N/D |
++ |
Incremento |
!= |
<> |
!= |
Equals |
<< |
<< |
<< |
LeftShift |
<<= |
<<= |
<<= |
LeftShift |
< |
< |
< |
Comparar |
<= |
<= |
<= |
Comparar |
&& |
N/D |
&& |
LogicalAnd |
|| |
N/D |
|| |
LogicalOr |
! |
N/D |
! |
LogicalNot |
% |
Mod |
% |
Mod ou restante |
%= |
N/D |
%= |
Mod |
* (binário) |
* |
* |
Multiplicar |
*= |
N/D |
*= |
Multiplicar |
~ |
Not |
~ |
OnesComplement |
>> |
>> |
>> |
RightShift |
>>= |
N/D |
>>= |
RightShift |
- (binário) |
- (binário) |
- (binário) |
Subtração |
-= |
N/D |
-= |
Subtração |
true |
IsTrue |
N/D |
IsTrue (propriedade) |
- (unário) |
N/D |
- |
Negue |
+ (unário) |
N/D |
+ |
Positivo |
false |
IsFalse |
False |
IsTrue (propriedade) |
== N/A não pode ser sobrecarregado no idioma selecionado.
A regra também verifica operadores de conversão implícitos e explícitos em um tipo ()SomeTypeverificando se há métodos ToSomeType nomeados e FromSomeType.
No C#, quando um operador binário é sobrecarregado, o operador de atribuição correspondente, se houver, é sobrecarregado também implicitamente.
Como Corrigir Violações
Para corrigir uma violação desta regra, a implementação do método alternativo para o operador; nomeie-o que usa o nome de backup recomendado.
Quando Suprimir Alertas
Não suprima um aviso dessa regra se você estiver implementando uma biblioteca compartilhada.Os aplicativos podem ignorar um aviso desta regra.
Exemplo
O exemplo a seguir define uma estrutura que viola esta regra.Para corrigir o exemplo, adicione um método público de Add(int x, int y) à 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 igualdades de operador em tipos de referência
CA2226: os operadores devem ter sobrecargas simétricas
CA2224: substituir igualdades em igualdades de operador de sobrecarga
CA2218: substituir GetHashCode em igualdades de substituição
CA2231: sobrecarregar igualdades de operador em ValueType.Equals substituídos