Udostępnij za pośrednictwem


CA2225: Operator overloads ma nazwanych zastępców

TypeName

OperatorOverloadsHaveNamedAlternates

CheckId

CA2225

Kategoria

Microsoft.Usage

Zmiana kluczowa

Niekluczowa

Przyczyna

Wykryto przeciążony operator i nie znaleziono alternatywnej, oczekiwanie nazwanej metody.

Opis reguły

Przeciążanie operatora pozwala na używanie symboli do reprezentowania obliczeń dla określonego typu.Na przykład typ, który overloads znak plusa (+) dla dodawania zazwyczaj mają inny członek o nazwie "Dodaj".Alternatywne nazwanego elementu członkowskiego udostępnia taką samą funkcjonalność jak operator, a jest świadczone dla deweloperów, którzy program w językach, których nie obsługuje przeciążonych operatorów.

Ta reguła sprawdza, czy operatory wymienione w poniższej tabeli.

C#

Język Visual Basic

C++

Alternatywna nazwa

+ (binarne)

+

+ (binarne)

Dodaj

+=

+=

+=

Dodaj

&

I

&

BitwiseAnd

&=

I =

&=

BitwiseAnd

|

Lub

|

BitwiseOr

|=

Lub =

|=

BitwiseOr

--

Nie dotyczy

--

Ubytek

/

/

/

Dzielenie

/=

/=

/=

Dzielenie

==

=

==

Równa się

^

Xor

^

Xor

^=

XOR =

^=

Xor

>

>

>

Porównaj

>=

>=

>=

Porównaj

++

Nie dotyczy

++

Przyrost

!=

<>

!=

Równa się

<<

<<

<<

LeftShift

<<=

<<=

<<=

LeftShift

<

<

<

Porównaj

<=

<=

<=

Porównaj

&&

Nie dotyczy

&&

LogicalAnd

||

Nie dotyczy

||

LogicalOr

!

Nie dotyczy

!

LogicalNot

%

Mod

%

Mod lub reszta

%=

Nie dotyczy

%=

Mod

* (binarnie)

*

*

Mnożenie

*=

Nie dotyczy

*=

Mnożenie

~

Nie

~

OnesComplement

>>

>>

>>

RightShift

>>=

Nie dotyczy

>>=

RightShift

-(binarne)

-(binarne)

-(binarne)

Odejmowanie

-=

Nie dotyczy

-=

Odejmowanie

true

Jest prawdą

Nie dotyczy

IsTrue (właściwość)

-(jednoargumentowy)

Nie dotyczy

-

Zanegować

+ (jednoargumentowy)

Nie dotyczy

+

Plus

fałsz

Jest fałszem

Fałsz

IsTrue (właściwość)

N/d! == nie można obciążać w wybranym języku.

Reguła sprawdza również niejawne i jawne rzutowania operatorów w typie (SomeType) przez sprawdzanie metody o nazwie ToSomeType i FromSomeType.

W języku C# gdy operatora dwuargumentowego jest przeciążony, odpowiedni operator przypisania, jest również niejawnie przeciążone.

Jak naprawić naruszenia

Aby naprawić to naruszenie tej zasady, zaimplementować alternatywne metody dla operatora; Nadaj mu nazwę o zalecanych alternatywna nazwa.

Kiedy pominąć ostrzeżenia

Nie pomijaj ostrzeżenie od tej reguły, w przypadku wdrażania współużytkowanej biblioteki.Aplikacje można zignorować ostrzeżenie od tej reguły.

Przykład

W poniższym przykładzie zdefiniowano strukturę, która narusza tej reguły.Aby rozwiązać problem w przykładzie, dodawać publicznego Add(int x, int y) metody w strukturze.

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

Powiązane reguły

CA1046: Nie przeciążaj operatora equals w typach referencyjnych

CA2226: Operatory powinny być przeciążane symetrycznie

CA2224: Zastąp metodę equals przeciążając operator equals

CA2218: Zastąp GetHashCode przy zastępowaniu Equals

CA2231: Przeciąż operator equals przy zastępowaniu ValueType.Equals