CA2225: 演算子オーバーロードには名前付けされた代替が存在します

TypeName

OperatorOverloadsHaveNamedAlternates

CheckId

CA2225

カテゴリ

Microsoft.Usage

互換性に影響する変更点

なし

原因

演算子のオーバーロードが検出され、予想される名前の代替メソッドが検出されませんでした。

規則の説明

演算子のオーバーロードでは、型の計算を表すときに記号を使用できます。 たとえば、追加を表す加算記号 (+) をオーバーロードする型には、"Add" という代替メンバーが含まれます。 名前付きの代替メンバーによって、演算子と同じ機能へアクセスできるようになります。また、演算子のオーバーロードをサポートしていない言語でプログラミングする場合でも、その代替メンバーを使用できます。

この規則では、次の表に示す演算子がチェックされます。

C#

Visual Basic

C++

代替名

+ (二項)

+

+ (二項)

Add

+=

+=

+=

Add

&

AND

&

BitwiseAnd

&=

And=

&=

BitwiseAnd

|

Or

|

BitwiseOr

|=

Or=

|=

BitwiseOr

--

なし

--

Decrement

/

/

/

Divide

/=

/=

/=

Divide

==

=

==

Equals

^

Xor

^

Xor

^=

Xor=

^=

Xor

>

>

>

Compare

>=

>=

>=

Compare

++

なし

++

Increment

!=

<>

!=

Equals

<<

<<

<<

LeftShift

<<=

<<=

<<=

LeftShift

<

<

<

Compare

<=

<=

<=

Compare

&&

なし

&&

LogicalAnd

||

なし

||

LogicalOr

!

なし

!

LogicalNot

%

Mod

%

Mod または Remainder

%=

なし

%=

Mod

* (二項)

*

*

Multiply

*=

なし

*=

Multiply

~

Not

~

OnesComplement

>>

>>

>>

RightShift

>>=

なし

>>=

RightShift

- (二項)

- (二項)

- (二項)

Subtract

-=

なし

-=

Subtract

true

IsTrue

なし

IsTrue (プロパティ)

- (単項)

なし

-

Negate

+ (単項)

なし

+

Plus

false

IsFalse

False

IsTrue (プロパティ)

なし == 選択した言語ではオーバーロードできません。

また、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: 参照型で、演算子 equals をオーバーロードしないでください

CA2226: 演算子は対称型オーバーロードを含まなければなりません

CA2224: オーバーロードする演算子 equals で Equals をオーバーライドします

CA2218: オーバーライドする Equals で GetHashCode をオーバーライドします

CA2231: ValueType.Equals のオーバーライドで、演算子 equals をオーバーロードします