关于方法参数中使用的逆变参数的问题

时间:2011-06-03 21:48:06

标签: c# contravariance

我读了一篇介绍协方差和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线不正确,我误解了逆变的概念。

哪一部分错了?什么概念没有被正确理解?怎么做对了?

1 个答案:

答案 0 :(得分:2)

协方差和逆变是关于通用参数;你的代码与它无关。

它不起作用,因为bc不是SubClass 所有SubClass es都是BaseClass es,但并非所有BaseClass都是SubClass es。