关于c#:哪些语言支持继承方法的返回类型的协方差?

关于c#:哪些语言支持继承方法的返回类型的协方差?

What languages support covariance on inherited methods' return types?

我最初问这个问题,但是在寻找答案时,发现我最初的问题是C#中缺少对继承方法的返回类型进行协方差的支持。 发现这一点之后,我对哪些语言支持此功能感到好奇。

我会接受谁能说出最多的名字的答案。

编辑:约翰·米利金(John Millikin)正确地指出,许多动态语言都支持这一点。 澄清:

我只在寻找静态/强类型语言。


  • C ++
  • 爪哇
  • REAL基础
  • 艾菲尔
  • 萨瑟
  • 模数3

当然,任何动态语言-Python,Ruby,Smalltalk,Javascript等。


正如Ivan Hamilton和Mat Noguchi指出的那样,C ++支持该功能。但是请注意,对于从MSVC 7.X到9.X的某个基类继承的模板类(可能还有6个),协变量返回类型是无效的。您收到错误C2555。


Java在1.5中增加了对此的支持。它不会在早期版本中编译。


C ++支持协变返回类型。


Basically what I'm asking is what languages support what I'm trying to do here.

C#是否允许您为get()set()方法指定不同的数据类型?如果没有,我会将它们拆分为实际的Leg get_leg()set_leg(DogLeg)函数。否则将发生以下两种情况之一:1)get_leg()的规范过高2)set_leg()的规范过低。


but I think thats what I'm asking for..or is it?

坦白说,我不知道你在问什么。 Java显然对返回类型协方差的支持与C#相同,因此,如果您要查找的内容缺少C#,那么Java也将缺少它。


推荐阅读