msdn文档中代表协方差是否有误?

时间:2016-06-22 18:23:25

标签: c# delegates covariance msdn contravariance

在关于协方差和逆变的this msdn documentation中,解释了out关键字用于声明通用参数协变。

  

您可以使用out关键字声明泛型类型参数协变。

然后给出了一个使用out关键字的示例,之后,这个语句就是关于委托作为方法参数的说法,它是"逆变",我认为应该被称为"协变"因为它仍标有out

  

此规则有一个例外。如果您将 contravariant 泛型委托作为方法参数,则可以将该类型用作委托的泛型类型参数。

然后这个例子如下:

interface ICovariant<out R>
{
    void DoSomething(Action<R> callback);
}

不应该是名为covariant而不是逆变的委托参数吗?

1 个答案:

答案 0 :(得分:0)

从Servy的评论中我理解了句子的含义,它不是逆变的界面,而Action<T>是一个通用的逆变委托。所以msdn文档是正确的,当我认为该句子是关于接口的泛型类型参数被认为是逆变时,这只是对我的误解。就是这样:

interface ICovariant<out R> //this is covariant
{
    void DoSomething(Action<R> callback); //this is contravariant
}