public interface IOInitializable<in ItemType>
什么是逆变:从较窄(圆形)转换为较宽(形状)
接口的意思?
后果和危害是什么?
我已阅读http://msdn.microsoft.com/en-us/library/dd469484.aspx但这对我没有帮助。
public interface IOInitializable<in ItemType>
什么是逆变:从较窄(圆形)转换为较宽(形状)
接口的意思?
后果和危害是什么?
我已阅读http://msdn.microsoft.com/en-us/library/dd469484.aspx但这对我没有帮助。
我建议阅读 Tomas 的解释:
归结为一个事实,如果您有一个传递多个“圆”的方法调用,则可以使用一个接受多个“形状”的函数,只要它不返回“形状”(因为可能是也可能不是“圆圈”)。
IComparer 是一个很好的例子来证明这一点。IComparer 看起来像这样:
IComparer<in T>
采取以下措施:
IComparer<Primate>
IComparer<Chimpanzee>
在哪里Chimpanzee : Primate
(当然)。需要 an 的方法IComparer<Chimpanzee>
可以将 anIComparer<Primate>
作为参数,因为如果比较器可以比较灵长类动物,它也可以比较黑猩猩,因为它使用两种类型的共同特征来影响比较。
考虑这一点的一个好方法是在功能方面。协方差允许传递实现核心功能的更复杂的对象(例如为对象传递字符串)。逆变做了类似的事情......比较所有灵长类动物比只比较黑猩猩更复杂。它允许您将特定类型的比较器替换为比较更通用类型的比较器。从这个意义上说,“in”比传递的实际类型更适用于方法的功能。