在多态性中我了解到只有派生类可以是基类,但是看看我的例子,基类现在是派生类:
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/