2012-11-16 3 views
8

가능한 중복 :
Is it necessary to override == and != operators when overriding the Equals method? (.NET)왜 오버라이드 ==는 equals를 오버라이드해야합니까?

C# 컴파일러 내가 오버라이드 (override) 할 필요가 내게 묻는 메시지가 ==를 무시하고 그냥 이유를 알고 싶은 경우에 동일?

+3

가능한 복제본 : http://stackoverflow.com/q/1222035/238902 – Default

+1

@Default 실제로, 나는 그것이 중복이라고 생각하지 않지만 - 그들은 연결되어 있습니다. 이것은 "==를 제공 할 때 Equals를 재정의해야합니까?"입니다. (답변은 일반적으로 : 예), 다른 하나는 "같음을 재정의 할 때 ==를 제공해야합니까?" (대답은 일반적으로 : 아니요, 실제로는 아닙니다) –

답변

4

그렇지 않으면 잠재적으로 서로 다른 결과를 산출하는 두 개의 의미 론적으로 비슷한 작업이 수행되어 많은 혼란을 의미합니다.

컴파일러에서 경고 메시지가 표시되는지 잘 모르겠지만 두 경우 모두 동일하게 동작하는지 확인하는 것이 좋습니다.

double.NaN == double.NaNdouble.NaN.Equals(double.NaN)과 같은 것이 있습니다. 당신이 경우

+0

+1 : 흥미 롭습니다. 나는 double을 인식하지 못했습니다 .NaN.Equals (double.NaN) == true'. – Henrik

12

==를 통해 평등을 다시 정의, 그것은 ==.Equals 매우 다른 무언가를하면 혼란 정말 가져오고 .Equals는 타입이 컴파일시에 알려져 있지 않은 경우에만 .Equals이기 때문에 대체되어야한다 유효한. 결과적으로 ==을 정의하는 것은 실제로는 ==, !=, EqualsGetHashCode을 정의하고 일부는 을 일부 T으로 구현하는 것을 의미합니다.

+0

+1 그래,'double.NaN'은 당신이 잘못했을 때 찌르다 :-) –

+0

'=='와'Equals'가 모든 상황에서 똑같이 동작하는 것은 불가능합니다. . 좀 더 도움이되는 것은'=='이 사용할 수있는 곳에서 일관성을 유지하고 '모든 곳에서 사용할 수 있기 때문에'모든 곳에서 일관성을 유지하는 것입니다. 똑같은 숫자를 나타내는 숫자 형은'=='을 비교해야한다는 규칙이 있습니다. 다른 점이 다르더라도 100 % 동등한 것이 'Equals'와 비교되어야합니다. IMHO는 현재있는 mishmosh보다 도움이 될 것입니다. . – supercat

+0

그대로, 예를 들어 '1.0m '과'1.00m' [문자열 표현이 달라야]이라는 숫자를 사전이 구분할 수 없기 때문에'Decimal '값을 문자열 표현으로 매핑하는 사전입니다. '=='연산자는 그 값들을 동일하다고 간주해야하지만, 그것이 '같음'을 의미하지는 않습니다. 또한,'=='오버로드가 정의되는 방식으로, 동등성 관계를 구현하지 못하고 실제로 수치 동등성을 테스트하지 않습니다. '16777217 == 16777216.0f'입니다. – supercat

1

그렇지 않으면 비교 방법에 따라 다른 결과가 나올 것이기 때문입니다.

(xy 다른 유형의 경우) y == x을하고는 다른 결과를 줄 수 x == y을 수행. 목록의 값을 찾거나 사전의 키로 사용하는 것과 같은 다른 비교는 == 연산자를 사용하지 않으므로 전혀 작동하지 않습니다.

+0

왜 다를 수 있습니까? 무엇을하기 위해서해야합니까? –

+0

@ MatíasFidemraizer :'x == y'는'x' 값에'=='연산자를 사용할 것이지만'y == x'는'y' 값에'=='연산자를 사용할 것입니다. 그것들이 다르게 구현된다면 (예.'y'는 기본 객체 비교를 사용합니다) 그들은 다른 결과를냅니다. – Guffa

+0

아, 알겠습니다. 그러나 그것은'x'와'y'가 다른 타입을 가진다면 일어날 것입니다. 둘 다 같은 타입을 가지고 있다면,'x == y' 또는'y == x'는 같은 방식으로 행동해야합니다. 어쩌면 당신은 우리의 대답에서 이것을 지적해야합니다. –

관련 문제