我一直在阅读 .NET4.5 将带来的变化,在这篇博文中,我偶然发现了一些我既不知道也不理解的东西。
在谈到只读集合的实现时,Immo Landwerth说:
不幸的是,我们的类型系统不允许使类型 T 协变,除非它没有将 T 作为输入的方法。因此,我们不能在 IReadOnlyList 中添加 IndexOf 方法。我们认为,与不支持协方差相比,这是一个很小的牺牲。
从我明显有限的理解来看,他似乎是在说,为了使我们能够IReadOnlyList<Shape>
通过传入 a来调用需要 a 的方法IReadOnlyList<Circle>
,我们不能有一个IReadOnlyList<T>.IndexOf(T someShape)
方法。
我看不出类型系统会如何阻止这种情况。有人可以解释吗?