在关于协方差和逆变的this msdn documentation中,解释了out
关键字用于声明通用参数协变。
您可以使用out关键字声明泛型类型参数协变。
然后给出了一个使用out
关键字的示例,之后,这个语句就是关于委托作为方法参数的说法,它是"逆变",我认为应该被称为"协变"因为它仍标有out
:
此规则有一个例外。如果您将 contravariant 泛型委托作为方法参数,则可以将该类型用作委托的泛型类型参数。
然后这个例子如下:
interface ICovariant<out R>
{
void DoSomething(Action<R> callback);
}
不应该是名为covariant而不是逆变的委托参数吗?
答案 0 :(得分:0)
从Servy的评论中我理解了句子的含义,它不是逆变的界面,而Action<T>
是一个通用的逆变委托。所以msdn文档是正确的,当我认为该句子是关于接口的泛型类型参数被认为是逆变时,这只是对我的误解。就是这样:
interface ICovariant<out R> //this is covariant
{
void DoSomething(Action<R> callback); //this is contravariant
}