假设我们有这个类结构:
public class BaseClass
{
public BaseClass()
{
Console.WriteLine("Base class constructor has been called.");
}
}
public class DerivedClass : BaseClass
{
public DerivedClass()
{
Console.WriteLine("Derived class constructor has been called.");
}
}
所以,我的问题很简单:为什么C#允许我使用Derived Class的构造函数创建Base类的实例? 解释: BaseClass instance = new DerivedClass();
我还想知道这样做有什么影响,或者这样做的好处是什么?我知道如果我执行此代码,首先调用基类构造函数然后调用派生构造函数,因为这遵循类继承的正常行为。 感谢。
答案 0 :(得分:3)
你不是;您正在创建DerivedClass
的实例,并在类型为BaseClass
的变量中存储对该实例的引用。类型为T
的C#(或几乎任何面向对象语言)中的任何变量都可以为类型为{{的任何对象保存引用(或指针,具体取决于您的语言) 1}}或在某个时刻从T
派生的类型。
这样做(在C#中,无论如何)对于如何构造对象没有任何影响,因此在任何严格意义上都没有“效果”。
答案 1 :(得分:3)
您没有创建基类的实例;您正在创建派生类的实例,并在具有基类类型的变量中存储对它的引用。具有引用派生类型实例的基类型的变量是多态的基础。