有关方法参数中使用的逆变参数的问题
本文关键字:参数 变参 问题 方法 | 更新日期: 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。