gpt4 book ai didi

c# - 为什么将派生类的实例分配给类型不是实例之一的变量,而是其基类

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

我有 5 年的经验。但老实说,虽然我知道并使用这个结构......

Baseclass bc = new DerivedClass(); 

我不知道它到底做了什么,不是真的,不是真的。它是派生类还是基类?而且我知道如果我调用 bc.Method() 我将获得派生类方法。但前提是我使用 new 关键字或 override 之类的东西。老实说,我在这里开始有点模糊,我想我需要回到基础,有人能指出我正确的方向吗?

最佳答案

您正在创建 DerivedClass 的实例并将其分配给 BaseClass 类型的变量。如果你有类似基类 Animal 的东西,它有两个派生类 Fish 和 Dog,但你不知道哪个将被实例化,这在你的上下文中并不重要,因为你将调用一个已定义的方法,这可能很有用在基类中。例如你可以有这样的东西:

Animal a;
if (whatever you want)
a = new Dog();
else
a = new Fish();
a.Feed();

修饰符的使用要小心,因为如果你在 Animal 中用 virtual 定义 Feed 并在 Fish 中用 override 重新定义它,Fish 版本将被执行(它在执行时被链接)。如果您不将基本版本标记为虚拟版本并将 Fish 版本标记为新版本,则会执行 Animal 版本(它在编译时链接)。

关于c# - 为什么将派生类的实例分配给类型不是实例之一的变量,而是其基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10734603/

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