次の方法で共有


演算子のオーバーロードに代替名を付けます

更新 : 2007 年 11 月

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# では、二項演算子をオーバーロードすると、対応する代入演算子がある場合には、この演算子も暗黙でオーバーロードされます。

違反の修正方法

この規則違反を修正するには、演算子の代替メソッドを実装し、推奨される代替名を付けます。

警告を抑制する状況

共有ライブラリを実装している場合は、この規則による警告を抑制しないでください。アプリケーションではこの規則の警告を無視できます。

使用例

この規則に違反する構造体の定義を次の例に示します。

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

関連規則

参照型で等値演算子をオーバーロードしないでください

演算子は対称的な方法でオーバーロードします

等値演算子のオーバーロードに equals をオーバーライドします

Equals のオーバーライドに対して GetHashCode をオーバーライドします

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