例如
更新:正如Jon Skeet所提到的,这个问题可以分成以下子问题:
1.编译器是否可以通过当前泛型类型及其所有基类型内部使用情况推断泛型类型的协变/逆变性? 例如..在.NET Framework 4.0中有多少个泛型接口参数可以自动标记为协变/逆变而不会产生歧义?约70%、80%、90%还是100%?
2.如果可以的话,编译器是否应该默认应用泛型类型的协变/逆变性?至少对于那些它能够分析并推断出类型使用中的协变/逆变性的类型。
IEnumerable<T>
接口:public interface IEnumerable<out T> : IEnumerable
{
IEnumerator<T> GetEnumerator();
}
在这个接口中,泛型类型仅用作接口方法的返回类型,并且不用作方法参数的类型,因此它可以是协变的。基于这一点,编译器是否可以从接口中推断出方差?如果可以,为什么C#要求我们显式设置协变/逆变关键字?更新:正如Jon Skeet所提到的,这个问题可以分成以下子问题:
1.编译器是否可以通过当前泛型类型及其所有基类型内部使用情况推断泛型类型的协变/逆变性? 例如..在.NET Framework 4.0中有多少个泛型接口参数可以自动标记为协变/逆变而不会产生歧义?约70%、80%、90%还是100%?
2.如果可以的话,编译器是否应该默认应用泛型类型的协变/逆变性?至少对于那些它能够分析并推断出类型使用中的协变/逆变性的类型。