我正在学习70-483考试,我对转换类型有疑问。 我按照一本书,在每一章的最后都有一些问题/答案,并且一个人完全混淆。
如果Manager类继承自Employee类,而Employee和Customer类都继承自Person类,那么以下哪项会缩小转换次数?
一个。将人员转换为经理
湾将员工转换为经理
℃。将员工转换为人员
d。将经理转换为人
即将经理转换为员工
F。将人员转换为员工
克。将客户转换为员工
小时。将员工转换为客户
答案是:
" A,B,F。 (从某种意义上说,你可以从技术上考虑g和h被视为缩小转换,但实际上它们只是无效的转换。)"
据我所知,我认为a,b,f是为了扩大转换次数
扩展转化是转化中的每个值 原始类型可以在结果类型中表示。
缩小转化是转换中的某些值 原始类型无法在结果类型中表示。
答案 0 :(得分:3)
将Person
转换为Manager
不会扩大,因为并非所有Person
个对象(原始类型)都可以在结果类型中表示。为什么?因为Customer
也是Person
而Customer
不能是Manager
。
但是,如果我们要从Manager
转换为Person
,我们可以为每个Manager
对象执行此操作。没有Manager
我们无法转换为Person
。因此,这种情况正在扩大。
有道理吗?
答案 1 :(得分:3)
如果我这样做
Person originalType = new Customer();
Employee resultType = (Employee)originalType; //this line is Example f in the book.
第二行会因无效的强制转换异常而失败。这意味着当您转换为Person
时,Employee
可能会失败。
如果你再看一下你的两条规则(强调我的)
- 扩展转化是一种转化,其中原始类型的每个值都可以在结果类型中表示。
- 缩小转化是一种转化,其中原始类型的某些值无法在结果类型中表示。
您会看到这将属于第二条规则,因为我们确实找到了无法表示为结果类型的原始类型的值。
答案 2 :(得分:1)
缩小是指为较大的群组的子集创建一个类,主要用于存储其他数据。
因此,当您将某个人转换为员工时,您会从较小/较窄的群体/类型的角度来看待它(员工是一个人,但一个人不一定是雇员)。
同样适用于将员工转换为经理并将人员转换为员工