Operatorüberladungen haben benannte Alternativen

     TypeName

OperatorOverloadsHaveNamedAlternates

CheckId

CA2225

Kategorie

Microsoft.Usage

Unterbrechende Änderung

NonBreaking

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, z. B. Visual Basic .NET.

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

C#-Symbol Alternativname

+, +=

Add

-, -=

Subtract

*, *=

Multiply

/, /=

Divide

%, %=

Mod

>, >=, <, <=, !=

Compare

==

Equals

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.

Warnungsausschluss

Schließen Sie keine Warnung dieser Regel aus, wenn Sie eine freigegebene 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 Verweistypen nicht überladen

Operatoren sollten symmetrische Überladungen haben

Equals beim Überladen des Gleichheitsoperators überschreiben

GetHashCode beim Überschreiben von Equals überschreiben

Equals überladen beim Überschreiben des Gleichheitsoperators durch einen Werttyp