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;}}
    }
}

相关规则

CA1046:不要对引用类型重载相等运算符

CA2226:运算符应有对称重载

CA2224:重载相等运算符时重写 Equals 方法

CA2218:重写 Equals 时重写 GetHashCode

CA2231:重写 ValueType.Equals 时应重载相等运算符