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