C#4.0中的通用差异已经实现,可以在没有异常的情况下编写以下内容(这将在C#3.0中发生):
List<int> intList = new List<int>();
List<object> objectList = intList;
Run Code Online (Sandbox Code Playgroud)
[非功能性示例:请参阅Jon Skeet的回答]
我最近参加了一个会议,其中乔恩斯基特给通用差异的很好的概述,但我不知道我完全得到它-我理解的重要性in和out关键词,当谈到禁忌和协变,但我我很好奇幕后发生的事情.
执行此代码时CLR会看到什么?是隐式转换List<int>为List<object>或者它是否只是构建在我们现在可以在派生类型之间转换为父类型?
出于兴趣,为什么在以前的版本中没有引入这个,主要的好处是什么 - 即真实世界的使用?
关于Generic Variance的这篇文章的更多信息(但问题非常过时,寻找真实的,最新的信息)