CA2225: Operatorüberladungen weisen benannte Alternativen auf

TypeName

OperatorOverloadsHaveNamedAlternates

CheckId

CA2225

Kategorie

Microsoft.Usage

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Es wurde eine Operatorüberladung erkannt, und die erwartete benannte Alternativmethode wurde nicht gefunden.

Regelbeschreibung

Beim Überladen von Operatoren ist die Verwendung von Symbolen zulässig, um Berechnungen für einen Typ darzustellen.Beispielsweise verfügt ein Typ, der das Pluszeichen (+) für die Addition überlädt, in der Regel über einen Alternativmember mit dem Namen "Add".Der benannte Alternativmember gewährt auf die gleiche Funktionalität wie der Operator Zugriff und wird für Entwickler bereitgestellt, die in Sprachen programmieren, in denen überladene Operatoren nicht unterstützt werden.

Mit dieser Regel werden die in der folgenden Tabelle aufgeführten Operatoren überprüft.

C#

Visual Basic

C++

Alternativname

+ (binär)

+

+ (binär)

add

+=

+=

+=

add

&

And

&

BitwiseAnd

&=

And=

&=

BitwiseAnd

|

Oder

|

BitwiseOr

|=

Or=

|=

BitwiseOr

--

Nicht zutreffend

--

Decrement

/

/

/

Divide

/=

/=

/=

Divide

==

=

==

Equals

^

Xor

^

Xor

^=

Xor=

^=

Xor

>

>

>

Compare

>=

>=

>=

Compare

++

Nicht zutreffend

++

Increment

!=

<>

!=

Equals

<<

<<

<<

LeftShift

<<=

<<=

<<=

LeftShift

<

<

<

Compare

<=

<=

<=

Compare

&&

Nicht zutreffend

&&

LogicalAnd

||

Nicht zutreffend

||

LogicalOr

!

Nicht zutreffend

!

LogicalNot

%

Mod

%

Mod oder Remainder

%=

Nicht zutreffend

%=

Mod

* (binär)

*

*

Multiplizieren

*=

Nicht zutreffend

*=

Multiplizieren

~

Not

~

OnesComplement

>>

>>

>>

RightShift

>>=

Nicht zutreffend

>>=

RightShift

- (binär)

- (binär)

- (binär)

Subtract

-=

Nicht zutreffend

-=

Subtract

true

IsTrue

Nicht zutreffend

IsTrue (Eigenschaft)

- (unär)

Nicht zutreffend

-

Negate

+ (unär)

Nicht zutreffend

+

Plus

false

IsFalse

False

IsTrue (Eigenschaft)

Nicht zutreffend = kann in der ausgewählten Sprache nicht überladen werden.

Mit dieser Regel werden auch die impliziten und expliziten Typumwandlungsoperatoren eines Typs (SomeType) überprüft, indem nach den Methoden ToSomeType und FromSomeType gesucht wird.

In C# wird beim Überladen eines binären Operators implizit auch der zugehörige Zuweisungsoperator (falls vorhanden) überladen.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, implementieren Sie die Alternativmethode für den Operator. Benennen Sie die Methode mit dem empfohlenen Alternativnamen.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel, wenn Sie eine gemeinsam genutzte Bibliothek implementieren.Anwendungen können Warnungen dieser Regel ignorieren.

Beispiel

Im folgenden Beispiel wird ein Typ definiert, der gegen diese Regel verstößt.Um das Beispiel zu korrigieren, fügen Sie der Struktur eine öffentliche Add(int x, int y)-Methode hinzu.

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

Verwandte Regeln

CA1046: Gleichheitsoperator für Referenztypen nicht überladen

CA2226: Operatoren sollten symmetrische Überladungen aufweisen

CA2224: Equals beim Überladen von Gleichheitsoperatoren überschreiben

CA2218: GetHashCode beim Überschreiben von Equals überschreiben

CA2231: Überladen Sie den Gleichheitsoperator beim Überschreiben von ValueType.Equals