Какие языки поддерживают ковариацию типов возвращаемых значений унаследованных методов?
-
09-06-2019 - |
Вопрос
я изначально спросил этот вопрос, но, найдя ответ, обнаружил, что моей первоначальной проблемой было отсутствие поддержки в C# ковариации типов возвращаемых значений унаследованных методов.Обнаружив это, мне стало любопытно, какие языки делать поддержите эту функцию.
Я приму ответ того, кто назовет больше всех.
РЕДАКТИРОВАТЬ:Джон Милликин правильно заметил, что многие динамические языки поддерживают это.Чтобы уточнить:
Я ищу только статические/строго типизированные языки.
Решение
- С++
- Джава
- РЕАЛбазовый
- Эйфелева
- Сатер
- Модуль-3
Другие советы
Разумеется, любые динамические языки — Python, Ruby, Smalltalk, Javascript и т. д.
По сути, я спрашиваю, какие языки поддерживают то, что я пытаюсь здесь сделать.
Позволяет ли C# указывать разные типы данных для get()
и set()
методы?Если нет, я бы разделил их на реальные Leg get_leg()
и set_leg(DogLeg)
функции.В противном случае произойдет одно из двух:1) завышенная спецификация get_leg()
2) недоопределенность set_leg()
.
Java добавила поддержку этого в версии 1.5.Он не будет компилироваться в более ранних версиях.
Как отметили Иван Гамильтон и Мат Ногучи, C++ поддерживает эту функцию.Но обратите внимание, что ковариантные возвращаемые типы не работают для классов шаблонов, которые наследуются от некоторой базы в MSVC 7.X–9.X (и, возможно, также 6).Вы получаете ошибку C2555.
C++ поддерживает ковариантные типы возврата.
но я думаю, это то, о чем я прошу... или нет?
Я, честно говоря, не знаю, о чем вы спрашиваете.Java, очевидно, имеет ту же поддержку ковариации возвращаемого типа, что и C#, поэтому, если то, что вы ищете, отсутствует в C#, его нет и в Java.