2011-08-16 2 views
6

가능한 중복 :!
Why must we define both == and != in C#?오버로드 + = +, ==와 = 연산자를

왜에만 + 과부하에 의해 + = 수의 오버로드되지만 == 및! = 별도로 과부하가 걸립니까?
거꾸로 처리해야합니다.
= 새로운 개체에 메모리를 할당 할 필요가 없기 때문에 오버로드가 거의 항상 효과적입니다. 하지만 연산자 ==와! =는 결과 Equals()를 반전하는 것 이외에는 다른 것으로되어야하는 예제를 만들 수 없습니다.

답변

7

비슷한 질문이 asked before입니다.

가장 큰 이유는 ==!= 연산자를 오버로드 할 때 부울을 반환 할 필요가 없다는 것입니다. 부울 값을 반환하지 않으면 상속 연산자를 반전 할 수 없습니다. 별도로 과부하가 걸릴 수있는 다른 이유가있을 수 있습니다. 다른 이유로 그 질문에 대한 답변을 볼 수 있습니다.

+=을 오버로드 할 수없는 유효한 이유가 있으므로 + 연산자를 통해 암시 적으로 수행됩니다. C#에서 대입 연산자를 재정의 할 수 없다는 사실과 관련이 있습니다.이 연산자는 언어 표준의 일부입니다. +=은 증가 및 할당이며, 후자는 C#에서 오버로드 할 수 없습니다.

+4

+1'+'와'+ ='를 별도로 오버로드 할 수있는 경우를 상상해보십시오 ... –

+0

C#과 .net이 변경 가능한 구조의 악의적 인 일을하지 않으면 (변경 가능한 구조체는 악의가 아닙니다. 그것들과 같은 것들이 있습니다.) 또는 클래스가 객체에 대한 참조의 악의없는 무차별 공유를 제한하도록 허용 한 경우, + 연산자를 사용하면 +와 + 연산자를 별도로 사용하는 것이 유용 할 수 있습니다. 원본은 그대로두고, "+ ="는 원본을 수정할 수 있음을 의미합니다. 참고로, 이벤트가 "+ ="및 "- ="을 지원하지만 "+"및 "-"는 지원하지 않습니다. – supercat

관련 문제