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; } }
}
관련 규칙
.NET