![](/img/trans.png)
[英]Why is the base class and derived class constructor getting called when creating object of the child class
[英]Using the constructor of the base class when creating new object of derived class?
仅当您想要继承A
的B
实例时,才不必使用B
构造函数。
您还可以设置B
以便为您调用A
的构造函数,例如:
public class A
{
public A()
{
}
}
public class B : A
{
public B() : base()
{
}
}
这完全取决于A
和B
类的实现以及要使用它们的目的。
编辑:
根据您的图像,您之所以像Vehicle c = new Car()
那样调用,是因为您实际创建的对象是Car
但是您仍然希望或需要使用基类的各个方面。 拥有此基类意味着您可以在实现类之间具有公共属性。
例如:
public class Vehicle
{
public Vehicle()
{
}
public int NumberOfWheels { get; set; }
}
public class Car : Vehicle
{
public Car() : base()
{
NumberOfWheels = 4;
}
}
public class Motorbike : Vehicle
{
public Motorbike() : base()
{
NumberOfWheels = 2;
}
}
这种情况只允许您一次定义NumberOfWheels
,并且只为您正在编写的实现设置适当的值。 您可以使用virtual
方法对方法执行相同的操作。
A myA = new B();
这将创建类型B
的对象。 它没有创建类型A
的对象。 但是 ,您铸造的对象A
。 本质上来说,使用非常规术语进行转换意味着您说的是'将其视为A
查看该对象。 忽略它可能是B
的事实。 只向我展示在A
)类中定义的方法和属性。
请注意,您可以将其重新投射回B
,这不会改变对象:
B myB = (B)myA;
两者之间的区别:
A myA = new A();
和这个:
A myA = new B();
是第一个语句正在创建类型A
的物理对象。 B
定义的任何替代或新方法/属性/字段都不会创建 。 第二条语句将创建类型的物理对象B
,但是,以查看它(甚至暂时地)作为A
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.