关于contravariance 协方差和委托代表,我有些地方不理解。向下转换参数和向上转换返回类型的灵活性背后的理由是什么?
举个例子,比如说我们
Person
的方法
你可以的
将教师返回给(upcasting)
的方法
我有点糊涂。这个概念背后的理论基础是什么,以及为什么隐式支持下播?
发布于 2020-10-08 09:06:58
这很有道理。看一看:
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返回一个更特定的类型,而Method返回一个更通用的类型。该代码将不起作用,也完全没有意义。但是在这种情况下,它会这样做,因为您总是可以得到一个正确的类型,可以隐式地转换为Del的返回类型。而且,Del类型的参数类型比Method接受的参数类型更具体,因为它也是有意义的。例如,如果要交换它们,可以使用不正确的类型调用Method,但在本例中,可以使用Teacher对象始终为Person类型。
https://stackoverflow.com/questions/64258343
复制相似问题