C# 4.0 中的 Generic Variance 的实现方式使得可以毫无例外地编写以下内容(这在 C# 3.0 中会发生):
List<int> intList = new List<int>();
List<object> objectList = intList;
[示例非功能性:参见 Jon Skeet 的回答]
我最近参加了一个会议,Jon Skeet 对通用方差进行了出色的概述,但我不确定我是否完全理解它 - 我理解in
和out
关键字在反方差和协方差方面的重要性,但我很好奇幕后发生的事情。
执行此代码时,CLR 会看到什么?它是隐式转换List<int>
为List<object>
还是简单地内置,我们现在可以在派生类型之间转换为父类型?
出于兴趣,为什么在以前的版本中没有引入它,主要的好处是什么 - 即现实世界的使用?
有关通用差异的这篇文章的更多信息(但问题非常过时,正在寻找真实的最新信息)