首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# -缩小和扩大类继承

问c# -缩小和扩大类继承
EN

Stack Overflow用户
提问于 2016-11-03 15:15:01
回答 3查看 3.1K关注 0票数 5

我正在为70-483考试学习,我对转换类型有疑问。我跟着一本书,每一章的结尾都有一些问题/答案,其中一个我完全迷惑了。

如果Manager类从Employee类继承,而Employee类和Customer类都从Person类继承,那么下面哪个类正在缩小转换范围? a.将某人转变为经理 b.将雇员转为经理 c.将雇员转为某人 d.将经理改为某人 e.将经理转换为雇员 f.将某人转为雇员 g.将客户转变为雇员 h.将雇员转变为客户

答案是:

"A,B,F.(从技术上讲,你可以把g和h看作是收缩转换,但实际上它们只是无效的转换)。“

据我所知,我认为a,b,f正在扩大转换范围。

  • 拓宽转换是一种转换,其中原始类型的每个值都可以在结果类型中表示。
  • 收缩转换是一种转换,其中 原始类型不能在结果类型中表示。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-03 15:21:31

如果我做了

代码语言:javascript
复制
Person originalType = new Customer();
Employee resultType = (Employee)originalType; //this line is Example f in the book.

如果出现无效的强制转换异常,第2行将失败。这意味着,当您将Person转换为Employee时,有一个值可能是失败的。

如果你再看看你的两条规则(强调我的)

  • 拓宽转换是一种转换,其中原始类型的每个值都可以在结果类型中表示。
  • 收缩转换是指在结果类型中不能表示原始类型的某些值的转换。

您将看到这将属于第二条规则的范围,因为我们确实找到了一个无法表示为结果类型的原始类型的值。

票数 4
EN

Stack Overflow用户

发布于 2016-11-03 15:19:33

将Person转换为Manager并不是在扩大,因为并非所有Person对象(原始类型)都可以在结果类型中表示。为什么?因为Customer也是一个Person,Customer不能是Manager。

但是,如果我们要从Manager转换为Person,那么我们可以对每个Manager对象进行转换。没有Manager,我们不能转换为Person。因此,这种情况正在扩大。

合乎道理?

票数 3
EN

Stack Overflow用户

发布于 2016-11-03 15:22:20

缩窄是指为较大组的子集创建类时,主要存储其他数据。

因此,当您将一个人转换为一个员工时,您是从一个较小/较窄的组/类型的角度来看待它(员工是一个人,但一个人并不一定是一个雇员)。

同样适用于将员工转换为经理,将人转换为员工

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

https://stackoverflow.com/questions/40405167

复制
相关文章

相似问题

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