gpt4 book ai didi

c# - 在多态中只有派生类可以是基类,这里发生了什么?

转载 作者:太空狗 更新时间:2023-10-30 01:25:05 27 4
gpt4 key购买 nike

在多态性中我了解到只有派生类可以是基类,但是看看我的例子,基类现在是派生类:

static void Main()
{
Person a = new Customer();

//here a base class is a derived class
Customer c = (Customer)a;
}

class Person
{
}

class Customer : Person
{
}

为什么这是可能的?

派生类的成员在基类上实例化时不应该被丢弃?

如果我在基类中实例化派生类,分配的内存大小是派生类的大小?

最佳答案

因为 a 实际上是一个 Client 对象,所以这可以正常工作。让我更具体一点:
a 是 Person 类型的“变量”,它可以容纳从 Person 到它的任何子类的任何类型的“对象”。
c 是 Client 类型的“变量”,可以保存从 Client 到其任何子类的任何类型的“对象”。

您所做的是将 Client 的“对象”放入 Person 的“变量”中。无论您将此对象移动到何处,它始终是一个 Client 对象。所以,我们需要记住的是,即使你把一个Client的“对象”放到Person类型的“变量”中,这个对象类型仍然是client。在下一条语句中,您只是将对象移动到正确的类型中。

变量就像一个篮子。它可以容纳任何比它小的东西。如果你把那个东西从篮子里拿出来放到另一个篮子里,这个东西还是一样的。

关于c# - 在多态中只有派生类可以是基类,这里发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7806128/

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