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