Operatorüberladungen haben benannte Alternativen

Aktualisiert: November 2007

     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

|

Or

|

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)

*

*

Multiply

*=

Nicht zutreffend

*=

Multiply

~

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.

Behandlung 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.

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

Gleichheitsoperator bei Referenztypen nicht überladen

Operatoren sollten symmetrische Überladungen haben

Equals beim Überladen des Gleichheitsoperators überschreiben

GetHashCode beim Überschreiben von Equals überschreiben

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