Compartir a través de


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