.NET Framework 4.0 中的类型差异
-
06-09-2019 - |
题
IEnumerable<T>
, IComparable<T>
还有一些现在是类型变体。 IList<T>
, ICollection<T>
而其他许多人则不然。为什么?
解决方案
的.NET Framework 4.0引入的安全强> CO /禁忌方差。 IList<T>
和ICollection<T>
已经在输入和输出的位置仅在输出位置T
两者而IEnumerable<T>
具有T
和IComparable<T>
具有T
仅在输入位置
假设IList<T>
支持的类型方差:
static void FailingMethod(IList<object> list) {
list[0] = 5;
}
static void Test() {
var a = new List<string>();
a[0] = "hello";
FailingMethod(a); // if it was variant, this method call would be unsafe
}
其他提示
也可以看看: 什么是 C# 4.0 协方差 不 做
安德斯Hejlseberg具有短暂,但照明讨论描述在谈话CO /逆变,“C#的未来”。他对协方差和逆变讨论开始在50分17秒到演示。
不隶属于 StackOverflow