Sdílet prostřednictvím


CA2225: Přetížení operátoru mají pojmenované alternativy

TypeName

OperatorOverloadsHaveNamedAlternates

CheckId

CA2225

Kategorie

Microsoft.Usage

Narušující změna

Nenarušující

Příčina

Byl zjištěn při přetížení operátor a očekávané pojmenované alternativní metoda nebyla nalezena.

Popis pravidla

Přetěžování operátoru umožňuje použít symboly představují výpočty typu.Například typu přetížení na znaménko plus (+) pro sčítání má obvykle jiný člen s názvem "Přidat".Člen s názvem alternativní poskytuje přístup ke stejné funkce jako provozovatel a je k dispozici pro vývojáře, kteří programování v jazycích, které nepodporuje přetížené operátory.

Toto pravidlo zkontroluje operátory uvedené v následující tabulce.

C#

Visual Basic

C++

Alternativní název

+ (binární)

+

+ (binární)

Přidejte

+=

+=

+=

Přidejte

&

A

&

BitwiseAnd

&=

A =

&=

BitwiseAnd

|

Nebo

|

BitwiseOr

|=

Nebo =

|=

BitwiseOr

--

Není k dispozici

--

Snížení hodnoty

/

/

/

Rozdělit

/=

/=

/=

Rozdělit

==

=

==

Je rovno

^

Xor

^

Xor

^=

XOR =

^=

Xor

>

>

>

Porovnat

>=

>=

>=

Porovnat

++

Není k dispozici

++

Přírůstek

!=

<>

!=

Je rovno

<<

<<

<<

LeftShift

<<=

<<=

<<=

LeftShift

<

<

<

Porovnat

<=

<=

<=

Porovnat

&&

Není k dispozici

&&

LogicalAnd

||

Není k dispozici

||

LogicalOr

!

Není k dispozici

!

LogicalNot

%

Mod

%

Mod nebo zbytek

%=

Není k dispozici

%=

Mod

* (binární)

*

*

Násobit

*=

Není k dispozici

*=

Násobit

~

Ne

~

OnesComplement

>>

>>

>>

RightShift

>>=

Není k dispozici

>>=

RightShift

-(binární)

-(binární)

-(binární)

Odečíst

-=

Není k dispozici

-=

Odečíst

true

IsTrue

Není k dispozici

IsTrue (vlastnost)

-(unární)

Není k dispozici

-

Negovat

+ (unární)

Není k dispozici

+

Plus

false

IsFalse

False

IsTrue (vlastnost)

Není k dispozici == nesmí být přetížené ve vybraném jazyce.

Pravidlo také kontroluje operátory implicitní a explicitní přetypování v typu (SomeType) kontrolou metody s názvem ToSomeType a FromSomeType.

V jazyce C# Pokud binární operátor je přetížena, odpovídající operátor přiřazení, je také implicitně přetížené.

Jak vyřešit porušení

Stanovit porušení tohoto pravidla zavést alternativní metody pro provozovatele; název pomocí doporučené alternativní název.

Kdy potlačit upozornění

Pokud implementujete sdílené knihovny není potlačit upozornění od tohoto pravidla.Aplikace můžete ignorovat upozornění od tohoto pravidla.

Příklad

Následující příklad definuje strukturu, který porušuje tato pravidla.Chcete-li v příkladu, přidat veřejnou Add(int x, int y) metoda struktury.

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;}}
    }
}

Související pravidla

CA1046: Nepřetěžujte operátory rovnosti na odkazových typech

CA2226: Operátory by měly mít symetrické přetížení

CA2224: Přepište Equals při přetížení operátoru rovnosti

CA2218: Přepište GetHashCode při přepsání Equals

CA2231: Přetižte operátor equals při přepsání ValueType.Equals