我读过一篇介绍协方差和协方差的好文章
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 不正确,我误解了逆变的概念。
哪一部分是错的?什么概念没有正确理解?如何使它正确?