Wil*_*ler 4 generics .net-4.0 covariance c#-4.0
我希望熟悉最近发布的.NET Framework 4.0及其版本Covariance and Contravariance in Generics.
即使我已经阅读了引用链接中的内容,但我无法理解它应该如何使用,何时不应该使用.
我们赞赏一个简短的解释和一个简单的真实世界的代码示例.
谢谢!=)
Eric Meijer在Scott最近的一个播客中与Scott Hanselman讨论了Reactive Framework,其中一件事就是Eric说,在.NET 4.0中,IEnumerable是协变的,但在.NET 3.5中,IEnumerable不是.
这意味着,如果你有一个Banana继承自的对象Fruit,你可以将香蕉分配给Fruit变量,但是你不能将IEnumerable香蕉传递给期望.NET 3.5中的水果IEnumerable的方法,因为IEnumerable不是协变的.
来自播客:
如果我有一系列的香蕉,我可以发布你需要一系列水果的地方,因为香蕉是一种水果的子类型,所以如果我有一系列的香蕉,你需要一系列的水果,我可以传递给你那个阵列.现在,如果你期望有无数的水果,我无法传递给你一大堆香蕉,因为在.NET 4.0不协变之前可以枚举.事实上,尽管香蕉是一种特殊的水果,但是许多香蕉并不是一种可以接受的水果.