我想知道我们在程序中使用 Contravariance和Covariance 的真实场景。我看到了各种各样的博客,但我仍然感到困惑,我可以实施。
答案 0 :(得分:2)
你有没有写过foreach
?如果您已经使用了 Covariance ,那么这就是现实世界的用法。您可以对实现IEnumerable的任何类型使用foreach
。以下是IEnumerable
的签名:
public interface IEnumerable<out T> : IEnumerable
^^
||
// See the above out keyword
out
关键字用于协方差,因此它仅适用于返回类型。
您是否使用过IComparable界面,然后使用了 contravariance 。这是签名:
public interface IComparer<in T>
^^
||
// See the above in keyword
in
关键字用于逆转,因此它仅适用于界面成员的参数类型。
如果缺少out
和in
关键字,则它适用于输入参数和返回参数。这称为invariance
。