为什么基类允许我使用派生类构造函数创建实例?

时间:2011-12-12 23:31:42

标签: .net c#-4.0

假设我们有这个类结构:

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();

我还想知道这样做有什么影响,或者这样做的好处是什么?我知道如果我执行此代码,首先调用基类构造函数然后调用派生构造函数,因为这遵循类继承的正常行为。 感谢。

2 个答案:

答案 0 :(得分:3)

你不是;您正在创建DerivedClass的实例,并在类型为BaseClass的变量中存储对该实例的引用。类型为T的C#(或几乎任何面向对象语言)中的任何变量都可以为类型为{{的任何对象保存引用(或指针,具体取决于您的语言) 1}}或在某个时刻从T派生的类型。

这样做(在C#中,无论如何)对于如何构造对象没有任何影响,因此在任何严格意义上都没有“效果”。

答案 1 :(得分:3)

您没有创建基类的实例;您正在创建派生类的实例,并在具有基类类型的变量中存储对它的引用。具有引用派生类型实例的基类型的变量是多态的基础。