Compartilhar via


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