2011-03-06 1 views
2

누군가 참조 개체 비교를 수행하기 위해 operator==을 오버로드하는 아이디어를 지적 할 수 있습니까? (참조 비교 대신). MSDN에서C# 개체 비교

두 참조는 동일한 오브젝트를 표시할지 여부를 결정함으로써 기준 어떤지 기본적

운영자 == 시험. 따라서 참조 유형은이 기능을 얻기 위해 == 연산자를 구현할 필요가 없습니다. 형식이 불변 인 경우, 즉 인스턴스에 포함 된 데이터를 변경할 수없는 경우 참조 동등 대신 값 동등성을 비교하도록 연산자 ==을 (를) 오버로드하면 변경 불가능한 개체로 간주 될 수 있으므로 유용 할 수 있습니다. 그들은 같은 가치를 가지고 있기 때문에. non-immutable 타입에서 operator ==를 override하는 것은 좋은 생각이 아닙니다.

언제 실제로 도움이 될까요?

과 같은 모든 개체 값의 비교를 가능하게하는 방법 Equals, 왜 누군가가 이제까지 수행 할있는 경우 (참조하지) x == y 문을 사용하여 비교?

나는 뭔가를 이해하지 못한다고 생각합니다. 왜냐하면 이것은 매우 이상하게 보입니다.

답변

6

== 연산자를 오버로드하면 x.Equals(y)보다 훨씬 자연스럽고 x == y을 쓸 수 있으며 x이 null 인 경우에도 작동합니다.

+0

+1 "x가 null 인 경우에도 작동합니다."* 생각하지 않았습니다. – digEmAll

+0

'같음 (x, y)'도 null을 처리합니다. – SLaks

1

오버로드 연산자 ==은 코드의 가독성을 향상시킵니다. 특히 깊은 개체 비교를 위해 정의한 유형에 항상 .Equals()를 사용하십시오.

0

System.String은 참조 비교 대신 깊은 값 평등 비교를 사용하는 참조 유형의 고전적인 예입니다.

일반적으로 코드를 더 쉽게 작성하고 평등의 의미가 참조 비교에 의한 값 비교에 더 잘 표현되는 경우가 있습니다.