Какие языки поддерживают ковариантность для возвращаемых типов унаследованных методов?

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

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

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

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


person Luke    schedule 05.09.2008    source источник


Ответы (7)


  • C++
  • Джава
  • REALbasic
  • Эйфель
  • Сатер
  • Модуль-3
person Ivan Hamilton    schedule 06.09.2008

Конечно, любые динамические языки — Python, Ruby, Smalltalk, Javascript и т. д.

person John Millikin    schedule 05.09.2008
comment
Я вижу, что вы удалили Java из списка, потому что Java разрешает его только для объектов в той же иерархии наследования, но я думаю, что это то, о чем я прошу ... или это так? - person Luke; 06.09.2008

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

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

person John Millikin    schedule 05.09.2008

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

person John Meagher    schedule 08.09.2008

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

person mlbrock    schedule 16.09.2008

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

person Mat Noguchi    schedule 05.09.2008

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

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

person John Millikin    schedule 05.09.2008