CA2225: Operator overloads nazwaną zastępcy
TypeName |
OperatorOverloadsHaveNamedAlternates |
CheckId |
CA2225 |
Kategoria |
Microsoft.Usage |
Złamanie zmiany |
Bez podziału |
Przyczyna
Wykryto przeciążenie operatora i nie można odnaleźć oczekiwanego nazwanych alternatywnej metody.
Opis reguły
Przeciążanie operatora pozwala na używanie symboli do reprezentowania obliczenia dla określonego typu.Na przykład typ, który overloads symbol plus (+) dla dodawania zazwyczaj mają inny członek o nazwie "Dodaj".Nazwanego elementu członkowskiego alternatywny udostępnia taką samą funkcjonalność jak operator i jest świadczone dla deweloperów, którzy program w językach, które nie obsługują przeciążone operatory.
Ta reguła sprawdza podmiotów wymienionych w poniższej tabeli.
C# |
Visual Basic |
C++ |
Alternatywna nazwa |
---|---|---|---|
+ (binarne) |
+ |
+ (binarne) |
Dodaj |
+= |
+= |
+= |
Dodaj |
& |
I |
& |
BitwiseAnd |
& = |
I = |
& = |
BitwiseAnd |
| |
Lub |
| |
BitwiseOr |
|= |
Lub = |
|= |
BitwiseOr |
-- |
N/D! |
-- |
Zmniejsz |
/ |
/ |
/ |
Dzielenie |
/= |
/= |
/= |
Dzielenie |
== |
= |
== |
Jest równe |
^ |
XOR |
^ |
XOR |
^= |
XOR = |
^= |
XOR |
> |
> |
> |
Porównaj |
> = |
> = |
> = |
Porównaj |
++ |
N/D! |
++ |
Przyrost |
!= |
< > |
!= |
Jest równe |
<< |
<< |
<< |
LeftShift |
<< = |
<< = |
<< = |
LeftShift |
< |
< |
< |
Porównaj |
< = |
< = |
< = |
Porównaj |
& & |
N/D! |
& & |
LogicalAnd |
|| |
N/D! |
|| |
LogicalOr |
! |
N/D! |
! |
LogicalNot |
% |
Funkcja MOD |
% |
Mod lub pozostałej |
%= |
N/D! |
%= |
Funkcja MOD |
* (binarne) |
* |
* |
Mnożenie |
*= |
N/D! |
*= |
Mnożenie |
~ |
Nie |
~ |
OnesComplement |
>> |
>> |
>> |
RightShift |
>> = |
N/D! |
>> = |
RightShift |
-(binarne) |
-(binarne) |
-(binarne) |
Odejmij |
-= |
N/D! |
-= |
Odejmij |
PRAWDA |
IsTrue |
N/D! |
IsTrue (właściwość) |
-(jednoargumentowy) |
N/D! |
- |
Zanegować |
+ (jednoargumentowy) |
N/D! |
+ |
Plus |
FAŁSZ |
IsFalse |
FAŁSZ |
IsTrue (właściwość) |
Brak == nie może być nadmiernie obciążony w wybranym języku.
Reguła sprawdza również operatorów niejawnym i jawnym oddanych w typie (SomeType), sprawdzając metody o nazwie ToSomeType i FromSomeType.
W C# podczas jest przeciążony operator binarny, odpowiedni operator przypisania, jeśli takie są, jest również niejawnie przeciążone.
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady, zaimplementować alternatywne metody dla operatora; nazwy przy użyciu zalecanych alternatywna nazwa.
Kiedy do pomijania ostrzeżenia
Nie pomijaj ostrzeżenie od tej reguły, jeśli są wykonania współużytkowanej biblioteki.Aplikacje można zignorować ostrzeżenie od tej reguły.
Przykład
Poniższy przykład definiuje strukturę, która narusza reguły.Aby poprawić w przykładzie, dodawać publicznego Add(int x, int y) metody do 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;}}
}
}
Zasady pokrewne
CA1046: Nie obciążając operator równości na typy odwołań
CA2226: Podmioty gospodarcze powinny mieć overloads symetryczne
CA2224: Zastępowanie jest równe na przeciążanie operatora równości
CA2218: Zastępowanie GetHashCode na zastępowanie równa się
CA2231: Operator przeciążenie jest równe na przesłanianie ValueType.Equals