繁体   English   中英

在Polymorphism中,只有派生类可以作为基类,这里发生了什么?

[英]In Polymorphism only derived class can be the base class, what happens here?

在Polymorphism中,我了解到只有派生类可以作为基类,但是看看我的例子,基类现在是派生类:

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保存到其任何子类。

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

变量就像一个篮子。 它可以容纳任何比它小的东西。 如果您将物体从篮子中取出并放入另一个篮子中,物体仍然保持不变。

虽然上面的工作确实有效(如其他答案中所述),但以下操作会失败,这可能是不尝试将基类强制转换为派生类的重点(除非您在运行时确实知道该类型)。

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

   //This will fail at runtime.
   Programmer c = (Programmer)a; 
} 

class Person 
{ 
} 

class Customer : Person 
{ 
} 

class Programmer: Person 
{ 
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM