问题描述
对于代表的协方差和协方差,我不了解。向下传递参数和向上传递返回类型的灵活性背后的原理是什么
例如,说我们有
您可以
我有点困惑。这个概念背后的原理是什么?为什么暗中支持向下转换?
解决方法
这很合理。看看:
public class Program
{
public static void Main()
{
Del d = Method;
var p = d(new Teacher());
}
public delegate Person Del(Teacher t);
public static Teacher Method(Person p)
{
return new Teacher();
}
}
public class Person {}
public class Teacher : Person {}
Method
返回一个Teacher
对象,该对象始终为Person
类型,但是想象一下您交换类型并使Del
返回更具体的类型,而{{1}返回更通用的类型。该代码将无法正常工作,也将毫无意义。但是在这种情况下,它会像您总是获得正确的类型一样来进行隐式转换为Method
的返回类型。同样,Del
类型的参数的类型比Del
接受的参数的类型更具体,因为它也很有意义。例如,如果要交换它们,则可以使用错误的类型调用Method
,但是在这种情况下,可以正常使用Method
对象的类型总是为Teacher
。