0

我读过一篇介绍协方差和协方差的好文章

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 不正确,我误解了逆变的概念。

哪一部分是错的?什么概念没有正确理解?如何使它正确?

4

1 回答 1

3

协变和逆变是关于泛型参数的;你的代码与它无关。

它不起作用,因为bc不是SubClass.
所有SubClass的 es 都是BaseClasses,但不是所有BaseClass的 es 都是SubClasses。

于 2011-06-03T21:50:42.287 回答