Udostępnij za pośrednictwem


CA2225: Operator overloads nazwaną zastępcy

TypeName

OperatorOverloadsHaveNamedAlternates

CheckId

CA2225

Kategoria

Microsoft.Usage

Złamanie zmiany

Bez podziału

Przyczyna

Wykryto przeciążenie operatora i nie można odnaleźć oczekiwanego nazwanych alternatywnej metody.

Opis reguły

Przeciążanie operatora pozwala na używanie symboli do reprezentowania obliczenia dla określonego typu.Na przykład typ, który overloads symbol plus (+) dla dodawania zazwyczaj mają inny członek o nazwie "Dodaj".Nazwanego elementu członkowskiego alternatywny udostępnia taką samą funkcjonalność jak operator i jest świadczone dla deweloperów, którzy program w językach, które nie obsługują przeciążone operatory.

Ta reguła sprawdza podmiotów wymienionych w poniższej tabeli.

C#

Visual Basic

C++

Alternatywna nazwa

+ (binarne)

+

+ (binarne)

Dodaj

+=

+=

+=

Dodaj

&

I

&

BitwiseAnd

& =

I =

& =

BitwiseAnd

|

Lub

|

BitwiseOr

|=

Lub =

|=

BitwiseOr

--

N/D!

--

Zmniejsz

/

/

/

Dzielenie

/=

/=

/=

Dzielenie

==

=

==

Jest równe

^

XOR

^

XOR

^=

XOR =

^=

XOR

>

>

>

Porównaj

> =

> =

> =

Porównaj

++

N/D!

++

Przyrost

!=

< >

!=

Jest równe

<<

<<

<<

LeftShift

<< =

<< =

<< =

LeftShift

<

<

<

Porównaj

< =

< =

< =

Porównaj

& &

N/D!

& &

LogicalAnd

||

N/D!

||

LogicalOr

!

N/D!

!

LogicalNot

%

Funkcja MOD

%

Mod lub pozostałej

%=

N/D!

%=

Funkcja MOD

* (binarne)

*

*

Mnożenie

*=

N/D!

*=

Mnożenie

~

Nie

~

OnesComplement

>>

>>

>>

RightShift

>> =

N/D!

>> =

RightShift

-(binarne)

-(binarne)

-(binarne)

Odejmij

-=

N/D!

-=

Odejmij

PRAWDA

IsTrue

N/D!

IsTrue (właściwość)

-(jednoargumentowy)

N/D!

-

Zanegować

+ (jednoargumentowy)

N/D!

+

Plus

FAŁSZ

IsFalse

FAŁSZ

IsTrue (właściwość)

Brak == nie może być nadmiernie obciążony w wybranym języku.

Reguła sprawdza również operatorów niejawnym i jawnym oddanych w typie (SomeType), sprawdzając metody o nazwie ToSomeType i FromSomeType.

W C# podczas jest przeciążony operator binarny, odpowiedni operator przypisania, jeśli takie są, jest również niejawnie przeciążone.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, zaimplementować alternatywne metody dla operatora; nazwy przy użyciu zalecanych alternatywna nazwa.

Kiedy do pomijania ostrzeżenia

Nie pomijaj ostrzeżenie od tej reguły, jeśli są wykonania współużytkowanej biblioteki.Aplikacje można zignorować ostrzeżenie od tej reguły.

Przykład

Poniższy przykład definiuje strukturę, która narusza reguły.Aby poprawić w przykładzie, dodawać publicznego Add(int x, int y) metody do 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;}}
    }
}

Zasady pokrewne

CA1046: Nie obciążając operator równości na typy odwołań

CA2226: Podmioty gospodarcze powinny mieć overloads symetryczne

CA2224: Zastępowanie jest równe na przeciążanie operatora równości

CA2218: Zastępowanie GetHashCode na zastępowanie równa się

CA2231: Operator przeciążenie jest równe na przesłanianie ValueType.Equals