Partilhar via


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