代表的协方差和协方差

问题描述

对于代表协方差协方差,我不了解。向下传递参数和向上传递返回类型的灵活性背后的原理是什么

例如,说我们有

  1. 人是人的超阶级,而老师是人的子阶级
  2. ReturnPersonDelagate,它表示返回一个人的方法
  3. TeacherParameterDelegate,代表将员工对象作为参数的方法

您可以

  1. 分配一种方法以将教师返回ReturnPersonDelagate(向上投射)
  2. 分配一个将Person作为参数TeacherParameterDelegate(向下转换)的方法

我有点困惑。这个概念背后的原理是什么?为什么暗中支持向下转换?

解决方法

这很合理。看看:

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