C #에서 복합 할당 연산자를 오버로드 할 수없는 이유는 무엇입니까?


11

제목이 오해의 소지가 있으므로 전체 질문을 읽으십시오 :-) .

"복합 할당 연산자"에 의해 op=, 예를 들어 이와 같은 구성을 염두에두고 +=있습니다. 순수 할당 연산자 ( =)는 내 질문에 속하지 않습니다.

"왜"라는 말은 의견이 아니라 일부 디자이너 나 동료 등이 자신의 추론을 표현할 때 자원 (책, 기사 등)을 의미합니다 (예 : 디자인 선택의 원천).

비대칭 C에서 발견 ++ 및 C # (로 나는 의아해하고 그래, 내가 알고있는 C #이 아닌 C ++ 2.0 ) - C ++에서 당신이 연산자를 오버로드 할 +=다음 거의 자동으로 적절한 쓰기 +이전에 정의 된 연산자에 의존 연산자. C #에서이 역 - 당신은 과부하 ++=당신을 위해 합성된다.

내가 실수하지 않으면, 나중의 접근법은 실제 +=객체의 경우 새로운 객체를 만들어야하기 때문에 최적화 기회를 없애 줍니다. 따라서 이러한 접근 방식에는 큰 이점이 있지만 MSDN은 너무 부끄럽습니다.

그리고 그 장점이 무엇인지 궁금합니다. 따라서 C # 서적, 기술 관련 비디오, 블로그 항목에서 설명을 발견하면 참조 해 주셔서 감사합니다.

내가 찾은 가장 가까운 것은 Eric Lippert 블로그에 대한 의견입니다. 왜 과부하 연산자는 C #에서 항상 정적입니까? 톰 브라운. 정적 과부하가 먼저 결정되면 구조체에 과부하가 걸리는 연산자를 지시합니다. 이것은 클래스에 과부하가 걸리는 것을 더 지시합니다.


3
새로운 C ++ 스타일에 대한 링크가 있습니까? 처음에는 과부하가 +=먼저 터무니없는 것 같습니다. 왜 결합 된 작업이 아닌 결합 된 작업에 과부하가 걸리겠습니까?
Telastyn

1
이러한 용어는 "복합 할당 연산자"라고 생각합니다.
Ixrec

2
@greenoldman Telastyn은 의미 적으로 + =가 +와 =의 구성이기 때문에 + =로 + =를 구현하는 것이 다른 방법보다 더 자연스럽게 보인다는 것을 암시했을 것입니다. 내가 아는 한 , + + + +를 갖는 것은 주로 최적화 트릭입니다.
Ixrec

1
@Ixrec : 때때로 a + = b는 의미가 있지만 a = a + b는 의미가 없습니다. 신원이 중요하고 A를 복제 할 수 없다고 생각하십시오. 때때로 a = a + b는 의미가 있지만 a + = b는 의미가 없습니다. 불변 문자열을 고려하십시오. 따라서 실제로 어떤 과부하를 따로 따로 결정할지 결정하는 능력이 필요합니다. 물론, 필요한 모든 빌딩 블록이 존재하고 명시 적으로 비활성화되지 않은 경우 누락 된 것을 자동 생성하는 것이 좋습니다. 그 C #은 그 atm을 허용하지 않습니다.
중복 제거기

4
@greenoldman-그 동기를 이해하지만 개인적 *=으로 참조 유형을 변경하는 것은 의미 상 올바르지 않습니다.
Telastyn

답변:


12

이에 대한 참조를 찾을 수는 없지만 C # 팀은 운영자 오버로드의 정상적인 하위 집합을 제공하기를 원했습니다. 그 당시 운영자 과부하는 불량 랩이었습니다. 사람들은 코드를 난독 처리했으며 악에 대해서만 사용할 수 있다고 주장했습니다. C #을 디자인 할 때 Java는 연산자 오버로드가 성가신 일이 없다는 것을 보여주었습니다 .

따라서 C #은 연산자 오버로드의 균형을 조정하여 악을하기가 더 어려웠지만 멋진 일도 만들 수있었습니다. 할당의 의미를 변경하는 것은 항상 악한 것으로 여겨지는 것들 중 하나입니다. 그 +=와 그 친척이 과부하가되게 함으로써 그러한 종류의 일이 가능해집니다. 예를 들어, +=새로운 참조를 만들지 않고 참조를 변경하면 예상되는 의미를 따르지 않아 버그가 발생합니다.


고마워요, 당신이 마음에 들지 않으면이 질문을 조금 더 열어 두겠습니다. 실제 디자인의 추론으로 아무도 당신을 이길 수 없다면, 나는 당신의 것을 받아 들여서 닫을 것입니다. 다시 한 번-감사합니다.
greenoldman

@greenoldman-당신도해야합니다. 나도 누군가가 더 구체적인 참고 문헌으로 대답하기를 바랍니다.
Telastyn

그래서 이것은 포인터와 포인트에 대해 이야기 할 수없는 곳이 머리를 편안하고 명확하게 양육하는 곳입니까? 부끄러운 수치.
중복 제거기

"사람들은 코드를 난독 처리한다고 주장했습니다."-여전히 그렇습니다. F # 라이브러리 중 일부를 보셨습니까? 운전자 소음. 예 : quanttec.com/fparsec
Den
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.