首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代表的协方差与反方差

代表的协方差与反方差
EN

Stack Overflow用户
提问于 2020-10-08 08:07:40
回答 1查看 72关注 0票数 1

关于contravariance 协方差委托代表,我有些地方不理解。向下转换参数和向上转换返回类型的灵活性背后的理由是什么?

举个例子,比如说我们

Person

  • ReturnPersonDelagate的
  1. Person作为超类,教师作为其子类,它表示一个返回person
  2. TeacherParameterDelegate的方法,该方法表示将employee对象作为参数

的方法

你可以的

将教师返回给(upcasting)

  • assign (downcasting)

的方法

  1. 分配给以Person为参数的
  2. 方法( TeacherParameterDelegate
  3. )

我有点糊涂。这个概念背后的理论基础是什么,以及为什么隐式支持下播?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 09:06:58

这很有道理。看一看:

代码语言:javascript
复制
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类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64258343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档