我没有参加PDC 2008,但我听到一些消息称C#4.0被宣布支持Generic协方差和反差异.也就是说,List<string>可以分配给List<object>.怎么会这样?
在Jon Skeet的C#深度书中,解释了为什么C#泛型不支持协方差和反方差.它主要用于编写安全代码.现在,C#4.0改为支持它们.它会带来混乱吗?
有人知道有关C#4.0的细节可以给出一些解释吗?
abstract class A<T> {
List<T> Items { get; set; }
}
class B {}
class C : A<B> {}
class D : B {}
class E : A<D> {}
static class X {
public A<B> GetThing(bool f) {
return f ? new E() : new C();
}
}
Run Code Online (Sandbox Code Playgroud)
无法确定条件表达式的类型,因为"ConsoleApplication4.E"和"ConsoleApplication4.C"之间没有隐式转换
现在我得到了"为什么"(我认为),但我看不出如何编译.我想我必须创建一个定义某种方差的接口并从中继承,但我不确定.但无论如何,E()都应该继承C().
任何接受者?
TIA