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

StackOverflow https://stackoverflow.com/questions/47009

Вопрос

я изначально спросил этот вопрос, но, найдя ответ, обнаружил, что моей первоначальной проблемой было отсутствие поддержки в 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top