CA2225: Operator overloads ma nazwanych zastępców
TypeName |
OperatorOverloadsHaveNamedAlternates |
CheckId |
CA2225 |
Kategoria |
Microsoft.Usage |
Zmiana kluczowa |
Niekluczowa |
Przyczyna
Wykryto przeciążony operator i nie znaleziono alternatywnej, oczekiwanie nazwanej metody.
Opis reguły
Przeciążanie operatora pozwala na używanie symboli do reprezentowania obliczeń dla określonego typu.Na przykład typ, który overloads znak plusa (+) dla dodawania zazwyczaj mają inny członek o nazwie "Dodaj".Alternatywne nazwanego elementu członkowskiego udostępnia taką samą funkcjonalność jak operator, a jest świadczone dla deweloperów, którzy program w językach, których nie obsługuje przeciążonych operatorów.
Ta reguła sprawdza, czy operatory wymienione w poniższej tabeli.
C# |
Język Visual Basic |
C++ |
Alternatywna nazwa |
---|---|---|---|
+ (binarne) |
+ |
+ (binarne) |
Dodaj |
+= |
+= |
+= |
Dodaj |
& |
I |
& |
BitwiseAnd |
&= |
I = |
&= |
BitwiseAnd |
| |
Lub |
| |
BitwiseOr |
|= |
Lub = |
|= |
BitwiseOr |
-- |
Nie dotyczy |
-- |
Ubytek |
/ |
/ |
/ |
Dzielenie |
/= |
/= |
/= |
Dzielenie |
== |
= |
== |
Równa się |
^ |
Xor |
^ |
Xor |
^= |
XOR = |
^= |
Xor |
> |
> |
> |
Porównaj |
>= |
>= |
>= |
Porównaj |
++ |
Nie dotyczy |
++ |
Przyrost |
!= |
<> |
!= |
Równa się |
<< |
<< |
<< |
LeftShift |
<<= |
<<= |
<<= |
LeftShift |
< |
< |
< |
Porównaj |
<= |
<= |
<= |
Porównaj |
&& |
Nie dotyczy |
&& |
LogicalAnd |
|| |
Nie dotyczy |
|| |
LogicalOr |
! |
Nie dotyczy |
! |
LogicalNot |
% |
Mod |
% |
Mod lub reszta |
%= |
Nie dotyczy |
%= |
Mod |
* (binarnie) |
* |
* |
Mnożenie |
*= |
Nie dotyczy |
*= |
Mnożenie |
~ |
Nie |
~ |
OnesComplement |
>> |
>> |
>> |
RightShift |
>>= |
Nie dotyczy |
>>= |
RightShift |
-(binarne) |
-(binarne) |
-(binarne) |
Odejmowanie |
-= |
Nie dotyczy |
-= |
Odejmowanie |
true |
Jest prawdą |
Nie dotyczy |
IsTrue (właściwość) |
-(jednoargumentowy) |
Nie dotyczy |
- |
Zanegować |
+ (jednoargumentowy) |
Nie dotyczy |
+ |
Plus |
fałsz |
Jest fałszem |
Fałsz |
IsTrue (właściwość) |
N/d! == nie można obciążać w wybranym języku.
Reguła sprawdza również niejawne i jawne rzutowania operatorów w typie (SomeType) przez sprawdzanie metody o nazwie ToSomeType i FromSomeType.
W języku C# gdy operatora dwuargumentowego jest przeciążony, odpowiedni operator przypisania, jest również niejawnie przeciążone.
Jak naprawić naruszenia
Aby naprawić to naruszenie tej zasady, zaimplementować alternatywne metody dla operatora; Nadaj mu nazwę o zalecanych alternatywna nazwa.
Kiedy pominąć ostrzeżenia
Nie pomijaj ostrzeżenie od tej reguły, w przypadku wdrażania współużytkowanej biblioteki.Aplikacje można zignorować ostrzeżenie od tej reguły.
Przykład
W poniższym przykładzie zdefiniowano strukturę, która narusza tej reguły.Aby rozwiązać problem w przykładzie, dodawać publicznego Add(int x, int y) metody w strukturze.
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;}}
}
}
Powiązane reguły
CA1046: Nie przeciążaj operatora equals w typach referencyjnych
CA2226: Operatory powinny być przeciążane symetrycznie
CA2224: Zastąp metodę equals przeciążając operator equals
CA2218: Zastąp GetHashCode przy zastępowaniu Equals
CA2231: Przeciąż operator equals przy zastępowaniu ValueType.Equals