상속된 메서드의 반환 유형에 대한 공분산을 지원하는 언어는 무엇입니까?
-
09-06-2019 - |
문제
원래는 물어봤는데 이 질문, 그러나 답을 찾는 과정에서 내 원래 문제는 상속된 메서드의 반환 유형에 대한 공분산에 대한 C#의 지원이 부족하다는 것을 발견했습니다.그걸 발견하고 나서 어떤 언어인지 궁금해졌어요. 하다 이 기능을 지원합니다.
나는 가장 많은 이름을 지을 수 있는 사람의 답변을 받아들이겠습니다.
편집하다:John Millikin은 많은 동적 언어가 이를 지원한다는 점을 정확하게 지적했습니다.명확히 하기 위해:
나는 정적/강력한 유형의 언어만을 찾고 있습니다.
해결책
- C++
- 자바
- REAL기본
- 에펠
- 새터
- 모듈라-3
다른 팁
물론 Python, Ruby, Smalltalk, Javascript 등 모든 동적 언어가 가능합니다.
기본적으로 제가 묻고 있는 것은 제가 여기서 하려는 일을 어떤 언어가 지원하는지입니다.
C#에서는 get()
그리고 set()
행동 양식?그렇지 않은 경우 실제 항목으로 분할하겠습니다. Leg get_leg()
그리고 set_leg(DogLeg)
기능.그렇지 않으면 다음 두 가지 중 하나가 발생합니다.1) 과잉 사양 get_leg()
2) 과소사양 set_leg()
.
Java는 1.5에서 이에 대한 지원을 추가했습니다.이전 버전에서는 컴파일되지 않습니다.
Ivan Hamilton과 Mat Noguchi가 지적했듯이 C++에서는 이 기능을 지원합니다.그러나 MSVC 7.X부터 9.X(아마도 6도)의 일부 기본을 상속하는 템플릿 클래스의 경우 공변 반환 유형이 손상됩니다.오류 C2555가 발생합니다.
C++는 공변 반환 유형을 지원합니다.
하지만 내 생각에는 그것이 내가 요구하는 것인 것 같아요.. 아니면 그럴까요?
솔직히 당신이 무엇을 요구하는지 모르겠습니다.Java는 분명히 C#과 동일한 반환 유형 공분산을 지원하므로 원하는 것이 C#에 부족하다면 Java에도 부족합니다.