다음을 통해 공유


CA2225: 연산자 오버로드에는 명명된 대체 항목이 있습니다.

TypeName

OperatorOverloadsHaveNamedAlternates

CheckId

CA2225

범주

Microsoft.Usage

변경 수준

주요 변경 아님

원인

연산자 오버로드가 감지되었으며 예상되는 이름의 대체 메서드를 찾을 수 없습니다.

규칙 설명

연산자 오버로드에서는 기호를 사용하여 형식 계산을 나타낼 수 있습니다.예를 들어, 더하기 기호(+)를 오버로드하는 형식에는 일반적으로 'Add'라는 이름의 대체 멤버가 있습니다.명명된 대체 멤버는 해당 연산자와 동일한 기능에 액세스할 수 있도록 해주며, 오버로드된 연산자가 지원되지 않는 언어로 프로그래밍하는 개발자에게 제공됩니다.

이 규칙에서는 다음 표에 나열된 연산자를 검사합니다.

C#

Visual Basic

C++

대체 이름

+(이진)

+

+(이진)

Add

+=

+=

+=

Add

&

And

&

BitwiseAnd

&=

And=

&=

BitwiseAnd

|

Or

|

BitwiseOr

|=

Or=

|=

BitwiseOr

--

N/A

--

Decrement

/

/

/

Divide

/=

/=

/=

Divide

==

=

==

Equals

^

Xor

^

Xor

^=

Xor=

^=

Xor

>

>

>

비교

>=

>=

>=

비교

++

N/A

++

Increment

!=

<>

!=

Equals

<<

<<

<<

LeftShift

<<=

<<=

<<=

LeftShift

<

<

<

비교

<=

<=

<=

비교

&&

N/A

&&

LogicalAnd

||

N/A

||

LogicalOr

!

N/A

!

LogicalNot

%

Mod

%

Mod 또는 Remainder

%=

N/A

%=

Mod

*(이진)

*

*

Multiply

*=

N/A

*=

Multiply

~

Not

~

OnesComplement

>>

>>

>>

RightShift

>>=

N/A

>>=

RightShift

-(이진)

-(이진)

-(이진)

Subtract

-=

N/A

-=

Subtract

true

IsTrue

N/A

IsTrue (Property)

-(단항)

N/A

-

Negate

+(단항)

N/A

+

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를 재정의할 때 같음 연산자를 오버로드하십시오.