gpt4 book ai didi

c# - 为什么这个 Upcast 不起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:35 25 4
gpt4 key购买 nike

我有 2 个类 Test(Base) 和 Program(child)。现在我在沮丧的时候遇到了一些问题。

        Test t = new Program();// upcasting-works
Program p = (Program)t;//Downcasting-works
Program q = (Program)new Test();//Downcasting -throws exception.

我想知道为什么会抛出异常?可能它非常基本,但不知何故我没有得到。是为了那个新对象吗?

谢谢。

最佳答案

这是所有 OO 系统中的预期行为。简而言之,您不能向下转换为动态类型不匹配的对象。在这一行中:

Program q = (Program)new Test();

您正在创建一个 Test instance - 实例明显不匹配 ProgramTest不源自 Program .在运行时,计算机检测到这种情况并抛出异常。

另一方面,您有:

 Test t = new Program();

在这里,您正在创建一个 Program instance - 实例匹配TestProgram确实源自 Test .

最后,你有:

Program p = (Program)t;

在这种情况下,t是对 Test 的引用, 但底层类型实际上是 Program - 在运行时,计算机能够确定是这种情况,因此允许转换工作。

关于c# - 为什么这个 Upcast 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1012122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com