我读了一篇介绍协方差和contracovariance的好文章
http://bartdesmet.net/blogs/bart/archive/2009/04/15/14377.aspx
逆变量参数应仅出现在输入位置:方法参数,仅设置属性或索引器。
class SubClass : BaseClass {
public void PrintSubClass() {}
}
class BaseClass{
}
static class Sample {
public static void PrintMeNow (SubClass c)
{
c.PrintSubClass();
}
}
static void Main(string[] args)
{
SubClass sc = new SubClass();
BaseClass bc = new BaseClass();
Sample.PrintMeNow(sc); // ok
Sample.PrintMeNow(bc); // Line A (not-ok Question: Is this contravariance?)
}
根据我对逆变的理解,我把代码放在上面。 显然,A线不正确,我误解了逆变的概念。
哪一部分错了?什么概念没有被正确理解?怎么做对了?
答案 0 :(得分:2)
协方差和逆变是关于通用参数;你的代码与它无关。
它不起作用,因为bc
不是SubClass
所有SubClass
es都是BaseClass
es,但并非所有BaseClass
都是SubClass
es。