c# - 在类继承上缩小和扩大

时间:2016-11-03 15:15:02

标签: c# type-conversion

我正在学习70-483考试,我对转换类型有疑问。 我按照一本书,在每一章的最后都有一些问题/答案,并且一个人完全混淆。

  

如果Manager类继承自Employee类,而Employee和Customer类都继承自Person类,那么以下哪项会缩小转换次数?

     
    

一个。将人员转换为经理

         

湾将员工转换为经理

         

℃。将员工转换为人员

         

d。将经理转换为人

         

即将经理转换为员工

         

F。将人员转换为员工

         

克。将客户转换为员工

         

小时。将员工转换为客户

  

答案是:

  
    

" A,B,F。 (从某种意义上说,你可以从技术上考虑g和h被视为缩小转换,但实际上它们只是无效的转换。)"

  

据我所知,我认为a,b,f是为了扩大转换次数

  • 扩展转化是转化中的每个值 原始类型可以在结果类型中表示。

  • 缩小转化是转换中的某些值 原始类型无法在结果类型中表示。

3 个答案:

答案 0 :(得分:3)

Person转换为Manager不会扩大,因为并非所有Person个对象(原始类型)都可以在结果类型中表示。为什么?因为Customer也是PersonCustomer不能是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)

缩小是指为较大的群组的子集创建一个类,主要用于存储其他数据。

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

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

相关问题