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

本文关键字:参数 变参 问题 方法 | 更新日期: 2023-09-27 17:58:18

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

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

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

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

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

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