我没有参加PDC 2008,但我听到一些消息称C#4.0被宣布支持Generic协方差和反差异.也就是说,List<string>可以分配给List<object>.怎么会这样?
在Jon Skeet的C#深度书中,解释了为什么C#泛型不支持协方差和反方差.它主要用于编写安全代码.现在,C#4.0改为支持它们.它会带来混乱吗?
有人知道有关C#4.0的细节可以给出一些解释吗?
重写方法时,C++和Java支持返回类型协方差.
但是,它们都不支持参数类型的反差 - 相反,它转换为过载(Java)或隐藏(C++).
那是为什么?在我看来,允许这样做是没有害处的.我可以在Java中找到它的一个原因 - 因为它无论如何都有"选择最特定版本"的重载机制 - 但是不能想到C++的任何原因.
示例(Java):
class A {
public void f(String s) {...}
}
class B extends A {
public void f(Object o) {...} // Why doesn't this override A.f?
}
Run Code Online (Sandbox Code Playgroud)