CA1046: 참조 형식에 같음 연산자를 오버로드하지 마십시오.
TypeName |
DoNotOverloadOperatorEqualsOnReferenceTypes |
CheckId |
CA1046 |
범주 |
Microsoft.Design |
변경 수준 |
주요 변경 |
원인
public 또는 중첩 public 참조 형식이 같음 연산자를 오버로드합니다.
규칙 설명
참조 형식의 경우 같음 연산자의 기본 구현은 대부분 항상 올바릅니다. 기본적으로 두 참조는 같은 개체를 가리킬 경우에만 같습니다.
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 같음 연산자의 구현을 제거합니다.
경고를 표시하지 않는 경우
참조 형식이 기본 제공 값 형식과 비슷하게 동작할 경우에는 이 규칙에서 경고를 표시하지 않아도 안전합니다. 형식 인스턴스에 대해 더하기 또는 빼기가 의미 있을 경우 같음 연산자를 구현하고 위반을 표시하지 않는 것이 올바를 수 있습니다.
예제
다음 예제에서는 두 참조를 비교할 때의 기본 동작을 보여 줍니다.
using System;
namespace DesignLibrary
{
public class MyReferenceType
{
private int a, b;
public MyReferenceType (int a, int b)
{
this.a = a;
this.b = b;
}
public override string ToString()
{
return String.Format("({0},{1})", a, b);
}
}
}
다음 응용 프로그램에서는 몇 가지 참조를 비교합니다.
using System;
namespace DesignLibrary
{
public class ReferenceTypeEquality
{
public static void Main()
{
MyReferenceType a = new MyReferenceType(2,2);
MyReferenceType b = new MyReferenceType(2,2);
MyReferenceType c = a;
Console.WriteLine("a = new {0} and b = new {1} are equal? {2}", a,b, a.Equals(b)? "Yes":"No");
Console.WriteLine("c and a are equal? {0}", c.Equals(a)? "Yes":"No");
Console.WriteLine("b and a are == ? {0}", b == a ? "Yes":"No");
Console.WriteLine("c and a are == ? {0}", c == a ? "Yes":"No");
}
}
}
이 예제의 결과는 다음과 같습니다.
관련 규칙
CA1013: 더하기 및 빼기를 오버로드할 때 같음 연산자를 오버로드하십시오.