CA2225:运算符重载具有命名的备用项
类型名 |
OperatorOverloadsHaveNamedAlternates |
CheckId |
CA2225 |
类别 |
Microsoft.Usage |
是否重大更改 |
否 |
原因
检测到运算符重载,但未找到预期的指定备用方法。
规则说明
运算符重载允许使用符号来表示类型的计算。 例如,重载用于加号 (+) 来进行相加的类型通常具有名为“Add”的备用成员。 命名的备用成员提供了对与运算符相同的功能的访问,它提供给开发人员,在用不支持重载运算符的语言进行编程时使用。
该规则检查下表中列出的运算符。
C# |
Visual Basic |
C++ |
备用名称 |
---|---|---|---|
+(二进制) |
+ |
+(二进制) |
添加 |
+= |
+= |
+= |
添加 |
& |
And |
& |
BitwiseAnd |
&= |
And= |
&= |
BitwiseAnd |
| |
Or |
| |
BitwiseOr |
|= |
Or= |
|= |
BitwiseOr |
-- |
不可用 |
-- |
递减 |
/ |
/ |
/ |
Divide |
/= |
/= |
/= |
Divide |
== |
= |
== |
Equals |
^ |
Xor |
^ |
Xor |
^= |
Xor= |
^= |
Xor |
> |
> |
> |
比较 |
>= |
>= |
>= |
比较 |
++ |
不可用 |
++ |
递增 |
!= |
<> |
!= |
Equals |
<< |
<< |
<< |
LeftShift |
<<= |
<<= |
<<= |
LeftShift |
< |
< |
< |
比较 |
<= |
<= |
<= |
比较 |
&& |
不可用 |
&& |
LogicalAnd |
|| |
不可用 |
|| |
LogicalOr |
! |
不可用 |
! |
LogicalNot |
% |
Mod |
% |
Mod 或 Remainder |
%= |
不可用 |
%= |
Mod |
*(二进制) |
* |
* |
相乘 |
*= |
不可用 |
*= |
相乘 |
~ |
Not |
~ |
OnesComplement |
>> |
>> |
>> |
RightShift |
>>= |
不可用 |
>>= |
RightShift |
-(二进制) |
-(二进制) |
-(二进制) |
Subtract |
-= |
不可用 |
-= |
Subtract |
true |
IsTrue |
不可用 |
IsTrue (Property) |
-(一元) |
不可用 |
- |
Negate |
+(一元) |
不可用 |
+ |
Plus |
false |
IsFalse |
False |
IsTrue (Property) |
N/A == 不能在选定语言中重载。
该规则还通过检查名为 ToSomeType 和 FromSomeType 的方法来检查类型 (SomeType) 中的隐式和显式转换运算符。
在 C# 中,重载一个二元运算符时,也会隐式重载相应的赋值运算符(若有)。
如何解决冲突
要修复与该规则的冲突,请实现运算符的备用方法;使用建议的备用名称来命名备用方法。
何时禁止显示警告
如果实现的是共享库,则不要禁止显示此规则发出的警告。 应用程序可以忽略与该规则有关的警告。
示例
下面的示例定义一个与该规则冲突的结构。 若要更正该示例,请将公共 Add(int x, int y) 方法添加到结构中。
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;}}
}
}