運算子多載必須有具名的替代方法
更新:2007 年 11 月
型別名稱 |
OperatorOverloadsHaveNamedAlternates |
CheckId |
CA2225 |
分類 |
Microsoft.Usage |
中斷變更 |
非中斷 |
原因
偵測到運算子多載,且找不到預期的具名替代方法。
規則描述
運算子多載容許使用符號來表示型別的計算。例如,針對加法而多載加號 (+) 的型別通常會有名稱為 'Add' 的替代成員。具名的替代成員會提供與運算子相同的功能存取,並且可供以不支援多載運算子 (Overload Operator) 的語言設計程式的開發人員使用。
此規則會檢查下表所列的運算子。
C# |
Visual Basic |
C++ |
替代名稱 |
---|---|---|---|
+ (二元) |
+ |
+ (二元) |
Add |
+= |
+= |
+= |
Add |
& |
And |
& |
BitwiseAnd |
&= |
And= |
&= |
BitwiseAnd |
| |
Or |
| |
BitwiseOr |
|= |
Or= |
|= |
BitwiseOr |
-- |
N/A |
-- |
遞減 |
/ |
/ |
/ |
Divide |
/= |
/= |
/= |
Divide |
== |
= |
== |
Equals |
^ |
Xor |
^ |
Xor |
^= |
Xor= |
^= |
Xor |
> |
> |
> |
比較 |
>= |
>= |
>= |
比較 |
++ |
N/A |
++ |
遞增 |
!= |
<> |
!= |
Equals |
<< |
<< |
<< |
LeftShift |
<<= |
<<= |
<<= |
LeftShift |
< |
< |
< |
比較 |
<= |
<= |
<= |
比較 |
&& |
N/A |
&& |
LogicalAnd |
|| |
N/A |
|| |
LogicalOr |
! |
N/A |
! |
LogicalNot |
% |
Mod |
% |
Mod 或餘數 |
%= |
N/A |
%= |
Mod |
* (二元) |
* |
* |
Multiply |
*= |
N/A |
*= |
Multiply |
~ |
Not |
~ |
OnesComplement |
>> |
>> |
>> |
RightShift |
>>= |
N/A |
>>= |
RightShift |
- (二元) |
- (二元) |
- (二元) |
Subtract |
-= |
N/A |
-= |
Subtract |
true |
IsTrue |
N/A |
IsTrue (屬性) |
- (二元) |
N/A |
- |
Negate |
+ (二元) |
N/A |
+ |
Plus |
false |
IsFalse |
False |
IsTrue (屬性) |
N/A == 在選取的語言中不能多載。
此規則也會檢查名為 ToSomeType 和 FromSomeType 的方法,以檢查型別 (SomeType) 中的隱含和明確轉型運算子。
在 C# 中,當二元 (Binary) 運算子為多載時,同時隱含對應的指派運算子 (若有的話) 為多載。
如何修正違規
若要修正此規則的違規情形,請實作運算子的替代方法,即使用建議的替代名稱加以命名。
隱藏警告的時機
如果您正在實作共用程式庫,請勿隱藏此規則的警告。應用程式可忽略此規則的警告。
範例
下列範例會定義違反此規則的結構。
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;}}
}
}