【发布时间】:2013-04-26 00:22:59
【问题描述】:
以下总结了我对 C# 中方差的理解。如果您能告诉我哪里出了问题,我将不胜感激,因为我阅读了 Eric Lippert 在 Exact rules for variance validity 上的文章,但大部分内容我都无法理解。 p>
方差是一个类型到另一种类型的转换(或 Eric Lippert 所说的投影)可以保持赋值兼容性(协变)或反转它(逆变),或者既不保持也不反转(不变性)的想法.
那是;如果 I 是 T 中的协变变换,其中 T 是一组类型,则对于 T 中的任何 T1 和 T2 类型,如果 T1 可分配给 T2,则 I<T1> 可分配给 I<T2>。如果我是逆变的,结果将被还原。如果我是不变的,那么I<T1> 既不能分配给I<T2>,也不能相反。
现在,一个类型是协变的还是逆变的意味着什么?方差不是类型投影的属性,而不是类型本身的属性。
泛型类型I<out T, in U> 在 T 上协变而在 U 上逆变是什么意思?
另外,逆变效度反转变体效度方向和协变效度反转变体效度方向是什么意思?
【问题讨论】:
-
这是一个相当复杂的问题,在这里的范围似乎有点大。老实说,我建议您阅读除 Eric 之外的更多文章,以了解协变和逆变。