如何在CLR上运行需要协变返回类型和"真实"类方差的语言Scala?

soc*_*soc 9 c# clr types c#-2.0

CLR不支持协变返回类型完全方差(即应用于类,而不仅仅是接口和委托),但有些语言针对CLR使用这些功能中的一个或两个.

CLR是否有一些实用的解决方法来启用此功能,或者这些语言是否采用某种重写/擦除/ ...技术来完全支持其功能集?

Chr*_*ung 13

可能与Java相同(Java 5支持语言级别的协变返回,但JVM不支持):通过添加合成方法.以下是Java如何做到这一点:假设你有一个这样的类:

class Foo implements Cloneable {
    @Override
    public Foo clone() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在幕后,生成了两个 clone方法:( public Foo clone()包含真实代码)和public Object clone()(只返回前者的结果).后一种方法(合成)是如何clone在JVM级别覆盖该方法.

  • @soc:仅仅因为C#委员会不想改变它的规格. (3认同)