많은 시나리오에서 연산자 오버로드를 사용하면 자신을 더 잘 표현할 수 있습니다. 왜 그들은 C#에서 거의 사용되지 않습니까?연산자 오버로드가 자주 사용되지 않는 이유는 무엇입니까?
답변
대부분의 개체 클래스에 대해 수학적 연산 (대다수의 연산자가 있음)을 사용하는 것이 적절하지 않기 때문에 자주 사용되지 않습니다. 원하는 작업의 의미는 보통 어떤 방식 으로든 다릅니다. 예를 들어 실제로 집계 나 그룹화를 원할 때와 같이 OrderLine 객체에 대한 추가를 사용하지 않을 것입니다.
"+"는 부모 요소에 자식 요소를 배치하는 데 괜찮은 방법처럼 보일 수 있지만 완전히 다른 의미를 갖습니다. "+"는 수학적으로 그들을 더할 것이라는 것을 암시합니다. 사실, 당신은이 둘 사이의 계급 관계를 목표로하고 있습니다. 그것은 당신에게 의미가 있을지 모르나, 나는 처음 프로그래머가 많은 프로그래머에게 그 코드를 읽지 못할 것이라고 생각합니다.
거의 사용하지 않기 때문에 거의 사용하지 않습니다.
게리에게 감사드립니다.내 XmlDocument 예제에서 의미 한 것은 둘 다 하나의 XML 컨테이너에 연결되도록하는 것이 었습니다. 더 좋은 예가있을 수 있습니다 : var completeXml = knifes + forks + spoons; –
당신이 의미 한 바를 설명해야한다는 사실은 처음에는 좋은 생각이 아닐 것이라는 지표입니다. 좋은 코드는 스스로 문서화해야합니다. –
희소성의 또 다른 이유는 함수 오버로드가 함수의 이름을 통해 자체 문서화 될 수있는 반면 매우 자주 문맥에 따라 연산자는 일반적으로 한두 개의 문자 만 사용한다는 것입니다.
이로 인해 과부하가 정확하게 달성하기 위해 의도 된 것을 명확하게 명확히 할 수 없습니다. 예를 들어, 문자열! = 비교 연산자 오버로드는 길이를 비교하는지, 대소 문자를 구분하지 않는 비교로 문자를 수행하는지 또는 정적 색인 배열에서 값을 조회하고 비교하는지 (즉, 미숙 한 예).
DSL (도메인 별 언어)을 쉽게 작성하는 언어로 많이 사용됩니다.
좋은 예가 BNF의 표기법 닫기를 사용하는 PEG입니다. 여기서 연산자는 매우 자연스럽고 표현력이 좋습니다.
Lua와 Nimrod의 PEG 모듈 용 Lpeg 라이브러리는 모두이 기능을 사용하고 있습니다.
.Net에서 연산자 오버로드에 대한 또 다른 큰 문제는 모든 연산자에 과부하가 걸리지 않는다는 것입니다. 그래서 예. 연산자 <<
또는 >>
이 사용 가능합니다. 또한 많이 사용되는 C++ 클래스의 일부는 오버로드 할 수 없습니다.
그래서 대부분의 시나리오에서는 불행히도 모든 통신 수에 액세스 할 수 없으므로 의미가 없습니다. http://msdn.microsoft.com/en-us/library/a1sway8w.aspx에서
:
사용자 정의 형식이 < < 연산자 과부하 수 (운영자 참조); 첫 번째 피연산자의 형식은 사용자 정의 형식이어야하며 두 번째 피연산자의 형식은 int 여야합니다. 2 진 연산자가 오버로드되면 해당 대입 연산자도 암시 적으로 오버로드됩니다.
- 1. org.hibernate.cache.Cache가 사용되지 않는 이유는 무엇입니까?
- 2. 일반 오버로드가 모호한 이유는 무엇입니까?
- 3. Linq 쿼리에서 연산자 오버로드가 발생했습니다.
- 4. 주문시 색인이 사용되지 않는 이유는 무엇입니까?
- 5. 대부분의 java.util.Date 메소드가 사용되지 않는 이유는 무엇입니까?
- 6. NHibernate.Cache.HashtableCacheProvider가 프로덕션 용도로 사용되지 않는 이유는 무엇입니까?
- 7. MutableString이 파이썬에서 사용되지 않는 이유는 무엇입니까?
- 8. PreAuthenticate가 기본적으로 사용되지 않는 이유는 무엇입니까?
- 9. Rails 3에서 검증이 사용되지 않는 이유는 무엇입니까?
- 10. Erlang 변수가 사용되지 않는 이유는 무엇입니까?
- 11. java.util.Date의 setTime() 메소드가 사용되지 않는 이유는 무엇입니까?
- 12. Rails Inflector 모듈이 사용되지 않는 이유는 무엇입니까?
- 13. 내 log4j.properties 파일이 사용되지 않는 이유는 무엇입니까?
- 14. C++ friend 연산자 오버로드가 컴파일되지 않습니다.
- 15. Collections.checkedMap과 친구들이 더 일반적으로 사용되지 않는 이유는 무엇입니까?
- 16. 템플릿이있는 클래스에서 이진 연산자 오버로드가 발생했습니다.
- 17. 더 엄격한 범위 지정이 더 자주 표시되지 않는 이유는 무엇입니까?
- 18. PHP에서 "#"주석 사용이 자주 권장되지 않는 이유는 무엇입니까?
- 19. css : ** color : red **가 사용되지 않는 이유는 무엇입니까?
- 20. Curl 및 wget : GET 매개 변수가 사용되지 않는 이유는 무엇입니까?
- 21. 텍스트 열의 SELECT DISTINCT 쿼리에 인덱스가 사용되지 않는 이유는 무엇입니까?
- 22. C#에서 사용되지 않는 using 지시문을 제거하는 이유는 무엇입니까?
- 23. 매개 변수 목록이없는 사례 클래스가 사용되지 않는 이유는 무엇입니까?
- 24. Silverlight 4에서 InvalidEnumArgumentException이 왜 사용되지 않는 이유는 무엇입니까?
- 25. s의 인덱스가 여기에서 정렬에 사용되지 않는 이유는 무엇입니까?
- 26. 레일 : 기본 응용 프로그램 레이아웃이 사용되지 않는 이유는 무엇입니까?
- 27. 테이블에서 사용 빈도/사용되지 않은 컬럼을 분리해야하는 이유는 무엇입니까?
- 28. 사용되지 않는 StringBufferInputStream 해당
- 29. 사용되지 않는 함수 찾기?
- 30. PHP에서 사용되지 않는 코드입니까?
좀 더 표현력이 좋은 곳을 몇 가지 예를 들려 줄 수 있습니까? – Joe
내 머리 꼭대기에서 벗어남 : XmlDocument completeXml = customers + orders; // XmlDocument를 만들고 자식 요소를 추가하는 대신. –