Какие языки поддерживают ковариацию по типам возвращаемых данных унаследованных методов? - PullRequest
3 голосов
/ 06 сентября 2008

Я первоначально задавал этот вопрос , но, найдя ответ, обнаружил, что моей первоначальной проблемой было отсутствие поддержки в C # ковариации для возвращаемых типов унаследованных методов. Узнав об этом, мне стало интересно, какие языки поддерживают поддерживают эту функцию.

Я приму ответ того, кто может назвать больше всего.

EDIT : Джон Милликин правильно указал, что многие динамические языки поддерживают это. Для уточнения:

Я ищу только статические / строго типизированные языки.

Ответы [ 7 ]

4 голосов
/ 06 сентября 2008
  • C ++
  • Java
  • REALbasic
  • Eiffel
  • Sather
  • Modula-3
2 голосов
/ 06 сентября 2008

Любые динамические языки, конечно - Python, Ruby, Smalltalk, Javascript и т. Д.

0 голосов
/ 16 сентября 2008

Как отмечают Иван Гамильтон и Мэт Ногучи, C ++ поддерживает эту функцию. Но обратите внимание, что ковариантные возвращаемые типы не работают для шаблонных классов, которые наследуются от некоторой базы в MSVC 7.X - 9.X (и, вероятно, также 6). Вы получаете ошибку C2555.

0 голосов
/ 08 сентября 2008

Java добавила поддержку для этого в 1.5. Он не будет компилироваться в более ранних версиях.

0 голосов
/ 06 сентября 2008

C ++ поддерживает ковариантные типы возврата.

0 голосов
/ 06 сентября 2008

По сути, я спрашиваю, какие языки поддерживают то, что я пытаюсь сделать здесь.

Позволяет ли C # указывать разные типы данных для методов get() и set()? Если нет, я бы разделил их на действительные функции Leg get_leg() и set_leg(DogLeg). В противном случае произойдет одно из двух: 1) завышение get_leg() 2) занижение set_leg().

0 голосов
/ 06 сентября 2008

но я думаю, это то, что я спрашиваю .. или это так?

Честно говоря, я не знаю, о чем вы спрашиваете. Java, очевидно, имеет ту же поддержку ковариации возвращаемого типа, что и C #, поэтому, если то, что вы ищете, отсутствует в C #, то в Java также отсутствует.

...