CA2225: Las sobrecargas del operador tienen alternativas con nombre
Nombre de tipo |
OperatorOverloadsHaveNamedAlternates |
Identificador de comprobación |
CA2225 |
Categoría |
Microsoft.Usage |
Cambio problemático |
No |
Causa
Se detectó una sobrecarga del operador y no se encontró el método alternativo con el nombre esperado.
Descripción de la regla
La sobrecarga de operadores permite el uso de símbolos para representar los cálculos de un tipo. Por ejemplo, un tipo que sobrecarga el símbolo más (+) para la suma normalmente tendría un miembro alternativo denominado 'Add'. El miembro alternativo con nombre proporciona acceso a la misma funcionalidad que el operador; esto se hace para los desarrolladores que programan en lenguajes que no admiten operadores sobrecargados.
Esta regla examina los operadores mostrados en la tabla siguiente.
C# |
Visual Basic |
C++ |
Nombre alternativo |
---|---|---|---|
+ (binario) |
+ |
+ (binario) |
Agregar |
+= |
+= |
+= |
Agregar |
& |
Y |
& |
BitwiseAnd |
&= |
And= |
&= |
BitwiseAnd |
| |
Or |
| |
BitwiseOr |
|= |
Or= |
|= |
BitwiseOr |
-- |
N/D |
-- |
Decrement |
/ |
/ |
/ |
Divide |
/= |
/= |
/= |
Divide |
== |
= |
== |
Equals |
^ |
Xor |
^ |
Xor |
^= |
Xor= |
^= |
Xor |
> |
> |
> |
Comparar |
>= |
>= |
>= |
Comparar |
++ |
N/D |
++ |
Increment |
!= |
<> |
!= |
Equals |
<< |
<< |
<< |
LeftShift |
<<= |
<<= |
<<= |
LeftShift |
< |
< |
< |
Comparar |
<= |
<= |
<= |
Comparar |
&& |
N/D |
&& |
LogicalAnd |
|| |
N/D |
|| |
LogicalOr |
! |
N/D |
! |
LogicalNot |
% |
Mod |
% |
Mod o Remainder |
%= |
N/D |
%= |
Mod |
* (binario) |
* |
* |
Multiply |
*= |
N/D |
*= |
Multiply |
~ |
Not |
~ |
OnesComplement |
>> |
>> |
>> |
RightShift |
>>= |
N/D |
>>= |
RightShift |
- (binario) |
- (binario) |
- (binario) |
Subtract |
-= |
N/D |
-= |
Subtract |
true |
IsTrue |
N/D |
IsTrue (propiedad) |
- (unario) |
N/D |
- |
Negate |
+ (unario) |
N/D |
+ |
Plus |
false |
IsFalse |
False |
IsTrue (propiedad) |
N/D == no se puede sobrecargar en el lenguaje seleccionado.
La regla también comprueba los operadores de conversión implícitos y explícitos de un tipo (SomeType) comprobando los métodos denominados ToSomeType y FromSomeType.
En el lenguaje C#, cuando se sobrecarga un operador binario, el operador correspondiente de asignación (si existe) también se sobrecarga de modo implícito.
Cómo corregir infracciones
Para corregir una infracción de esta regla, implemente el método alternativo para el operador; denomínelo utilizando el nombre alternativo recomendado.
Cuándo suprimir advertencias
No suprima las advertencias de esta regla si va a implementar una biblioteca compartida. Las aplicaciones pueden omitir una advertencia de esta regla.
Ejemplo
En el siguiente ejemplo se define una estructura que infringe esta regla. Para corregir el ejemplo, agregue un método público Add(int x, int y) a la estructura.
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;}}
}
}
Reglas relacionadas
CA1046: No sobrecargar el operador de igualdad en los tipos de referencia
CA2226: Los operadores deben tener sobrecargar simétricas
CA2224: Reemplazar Equals al sobrecargar operadores de igualdad
CA2218: Reemplazar el método GetHashCode al reemplazar el método Equals
CA2231: Sobrecargar el operador de igualdad al reemplazar el tipo de valor de igualdad