CA2225: Přetížení operátoru mají pojmenované alternativy
TypeName |
OperatorOverloadsHaveNamedAlternates |
CheckId |
CA2225 |
Kategorie |
Microsoft.Usage |
Narušující změna |
Nenarušující |
Příčina
Byl zjištěn při přetížení operátor a očekávané pojmenované alternativní metoda nebyla nalezena.
Popis pravidla
Přetěžování operátoru umožňuje použít symboly představují výpočty typu.Například typu přetížení na znaménko plus (+) pro sčítání má obvykle jiný člen s názvem "Přidat".Člen s názvem alternativní poskytuje přístup ke stejné funkce jako provozovatel a je k dispozici pro vývojáře, kteří programování v jazycích, které nepodporuje přetížené operátory.
Toto pravidlo zkontroluje operátory uvedené v následující tabulce.
C# |
Visual Basic |
C++ |
Alternativní název |
---|---|---|---|
+ (binární) |
+ |
+ (binární) |
Přidejte |
+= |
+= |
+= |
Přidejte |
& |
A |
& |
BitwiseAnd |
&= |
A = |
&= |
BitwiseAnd |
| |
Nebo |
| |
BitwiseOr |
|= |
Nebo = |
|= |
BitwiseOr |
-- |
Není k dispozici |
-- |
Snížení hodnoty |
/ |
/ |
/ |
Rozdělit |
/= |
/= |
/= |
Rozdělit |
== |
= |
== |
Je rovno |
^ |
Xor |
^ |
Xor |
^= |
XOR = |
^= |
Xor |
> |
> |
> |
Porovnat |
>= |
>= |
>= |
Porovnat |
++ |
Není k dispozici |
++ |
Přírůstek |
!= |
<> |
!= |
Je rovno |
<< |
<< |
<< |
LeftShift |
<<= |
<<= |
<<= |
LeftShift |
< |
< |
< |
Porovnat |
<= |
<= |
<= |
Porovnat |
&& |
Není k dispozici |
&& |
LogicalAnd |
|| |
Není k dispozici |
|| |
LogicalOr |
! |
Není k dispozici |
! |
LogicalNot |
% |
Mod |
% |
Mod nebo zbytek |
%= |
Není k dispozici |
%= |
Mod |
* (binární) |
* |
* |
Násobit |
*= |
Není k dispozici |
*= |
Násobit |
~ |
Ne |
~ |
OnesComplement |
>> |
>> |
>> |
RightShift |
>>= |
Není k dispozici |
>>= |
RightShift |
-(binární) |
-(binární) |
-(binární) |
Odečíst |
-= |
Není k dispozici |
-= |
Odečíst |
true |
IsTrue |
Není k dispozici |
IsTrue (vlastnost) |
-(unární) |
Není k dispozici |
- |
Negovat |
+ (unární) |
Není k dispozici |
+ |
Plus |
false |
IsFalse |
False |
IsTrue (vlastnost) |
Není k dispozici == nesmí být přetížené ve vybraném jazyce.
Pravidlo také kontroluje operátory implicitní a explicitní přetypování v typu (SomeType) kontrolou metody s názvem ToSomeType a FromSomeType.
V jazyce C# Pokud binární operátor je přetížena, odpovídající operátor přiřazení, je také implicitně přetížené.
Jak vyřešit porušení
Stanovit porušení tohoto pravidla zavést alternativní metody pro provozovatele; název pomocí doporučené alternativní název.
Kdy potlačit upozornění
Pokud implementujete sdílené knihovny není potlačit upozornění od tohoto pravidla.Aplikace můžete ignorovat upozornění od tohoto pravidla.
Příklad
Následující příklad definuje strukturu, který porušuje tato pravidla.Chcete-li v příkladu, přidat veřejnou Add(int x, int y) metoda struktury.
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;}}
}
}
Související pravidla
CA1046: Nepřetěžujte operátory rovnosti na odkazových typech
CA2226: Operátory by měly mít symetrické přetížení
CA2224: Přepište Equals při přetížení operátoru rovnosti
CA2218: Přepište GetHashCode při přepsání Equals
CA2231: Přetižte operátor equals při přepsání ValueType.Equals