다음을 통해 공유


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

속성
규칙 ID CA2225
제목 연산자 오버로드에는 명명된 대체 항목이 있습니다.
범주 사용 현황
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 9에서 기본적으로 사용 아니요

원인

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

기본적으로 이 규칙은 외부에 표시되는 형식만 확인하지만 이는 구성 가능합니다.

규칙 설명

연산자 오버로드를 사용하면 기호를 사용하여 형식에 대한 계산을 나타낼 수 있습니다. 예를 들어 추가하기 위한 더하기 기호+를 오버로드하는 형식에는 일반적으로 Add라고 명명된 대체 멤버가 있습니다. 명명된 대체 멤버는 연산자와 같은 기능에 액세스 권한을 제공합니다. 이는 오버로드된 연산자를 지원하지 않는 언어로 프로그래밍하는 개발자를 위해 제공됩니다.

이 규칙이 검사하는 내용은 다음과 같습니다.

  • To<typename>From<typename>이라 명명된 메서드 검사하여 형식의 암시적 캐스트 연산자 및 명시적 캐스트 연산자를 검사합니다.

  • 운영자는 다음 표에 나열되어 있습니다.

C# Visual Basic C++ 대체 메서드 이름
+ (이진) + + (이진) 추가
+= += += 추가
& & BitwiseAnd
&= And= &= BitwiseAnd
| 또는 | BitwiseOr
|= Or= |= BitwiseOr
-- 해당 없음 -- 감소
/ / / Divide
/= /= /= Divide
== = == 같음
^ Xor ^ Xor
^= Xor= ^= Xor
> > > CompareTo 또는 Compare
>= >= >= CompareTo 또는 Compare
++ 해당 없음 ++ ID 증가값
!= <> != 같음
<< << << LeftShift
<<= <<= <<= LeftShift
< < < CompareTo 또는 Compare
<= <= <= CompareTo 또는 Compare
&& 해당 없음 && LogicalAnd
|| 해당 없음 || LogicalOr
! 해당 없음 ! LogicalNot
% Mod % Mod 또는 나머지
%= 해당 없음 %= Mod
* (이진) * * 곱하기
*= 해당 없음 *= 곱하기
~ Not ~ OnesComplement
>> >> >> RightShift
>>= 해당 없음 >>= RightShift
- (이진) - (이진) - (이진) 빼기
-= 해당 없음 -= 빼기
true IsTrue 해당 없음 IsTrue(속성)
- (단항) 해당 없음 - Negate
+(단항) 해당 없음 + +
false IsFalse False IsTrue(속성)

*N/A는 선택한 언어로 연산자를 오버로드할 수 없음을 의미합니다.

참고 항목

C#에서 이항 연산자가 오버로드되면 해당 대입 연산자도 암시적으로 오버로드됩니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 연산자에 대한 대체 메서드를 구현합니다. 권장되는 대체 이름을 사용하여 명명합니다.

경고를 표시하지 않는 경우

공유 라이브러리를 구현하는 경우에는 이 규칙의 경고를 표시해야 합니다. 애플리케이션은 이 규칙의 경고를 무시할 수 있습니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#pragma warning disable CA2225
// The code that's violating the rule is on this line.
#pragma warning restore CA2225

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA2225.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

분석할 코드 구성

다음 옵션을 사용하여 이 규칙이 실행될 코드베이스 부분을 구성합니다.

이 규칙, 적용되는 모든 규칙 또는 적용되는 이 범주의 모든 규칙(사용)에 대해 이 옵션을 구성할 수 있습니다. 자세한 내용은 코드 품질 규칙 구성 옵션을 참조하세요.

특정 API 화면 포함

접근성을 기반으로 이 규칙을 실행할 코드베이스의 파트를 구성할 수 있습니다. 예를 들어 규칙이 퍼블릭이 아닌 API 표면에서만 실행되도록 지정하려면 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CAXXXX.api_surface = private, internal

예시

다음 예제에서는 이 규칙을 위반하는 구조체를 정의합니다. 예제를 수정하려면 구조체에 퍼블릭 Add(int x, int y) 메서드를 추가합니다.

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