c# - 缩小和扩大类继承

Ker*_*dan 5 c# type-conversion

我正在为 70-483 考试而学习,我对转换类型有疑问。我跟着一本书,在每一章的末尾都有一些问题/答案,我完全混淆了。

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

一种。将人员转换为经理

湾 将员工转换为经理

C。将员工转换为个人

d. 将经理转换为个人

e. 将经理转换为员工

F。将人转换为员工

G。将客户转化为员工

H。将员工转变为客户

答案是:

“A、B、F。(从技术上讲,您可以将 g 和 h 视为缩小转换,但实际上它们只是无效转换。)”

据我了解,我认为 a,b,f 是扩大转换

  • 扩展转换是一种转换,其中原始类型的每个值都可以在结果类型中表示。

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

Sco*_*ain 4

如果我做

Person originalType = new Customer();
Employee resultType = (Employee)originalType; //this line is Example f in the book.
Run Code Online (Sandbox Code Playgroud)

第二行将因无效的强制转换异常而失败。这意味着当您转换为 时,有一个值Person可能会失败Employee

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

  • 扩展转换是原始类型的每个值都可以在结果类型中表示的转换。
  • 缩小转换是原始类型的某些值无法在结果类型中表示的转换。

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