在.net中实际使用逆变和协方差

时间:2017-02-19 16:31:13

标签: asp.net c#-4.0 dotnetnuke covariance contravariance

我想知道我们在程序中使用 Contravariance和Covariance 的真实场景。我看到了各种各样的博客,但我仍然感到困惑,我可以实施。

1 个答案:

答案 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关键字用于逆转,因此它仅适用于界面成员的参数类型。

如果缺少outin关键字,则它适用于输入参数和返回参数。这称为invariance