C#不从基类继承构造函数

时间:2010-12-28 07:27:56

标签: c# .net inheritance constructor

  

可能重复:
  Constructors and Inheritance
  Why are constructors not inherited?

当定义继承自基类的类时,我必须重新定义其所有构造函数。 我想知道为什么C#不支持从基类的构造函数继承?

3 个答案:

答案 0 :(得分:15)

构造函数不是继承的,因为我们无法正确确定派生类对象的实例化方式。当所有派生类都隐式使用父代的构造函数时,在我看来这将是一个问题,因为如果我们忘记重新定义构造函数,该对象可能已被错误地初始化。如果您希望派生类构造函数与父类构造函数执行相同操作,请使用base调用它。

还要注意,如果不调用任何其他明确接受参数的基类构造函数,则会自动运行基类构造函数(无参数)。所以打电话给base() is redundant

答案 1 :(得分:2)

只有成员变量和成员方法可以从一个类继承到派生。

答案 2 :(得分:2)

派生类的构造函数隐式调用基类的构造函数或Java术语中的超类。在继承中,所有基类构造函数在派生类的构造函数之前按类的层次结构出现的顺序调用。

现在,如果基类有多个构造函数,那么派生类必须定义应该调用哪一个。例如:

public class CoOrds
{
    private int x, y;

    public CoOrds()
    {
        x = 0;
        y = 0;
    }

    public CoOrds(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

//inherits CoOrds:
public class ColorCoOrds : CoOrds
{
    public System.Drawing.Color color;

    public ColorCoOrds() : base ()
    {
        color = System.Drawing.Color.Red;
    }

    public ColorCoOrds(int x, int y) : base (x, y)
    {
        color = System.Drawing.Color.Red;
    }
}

有关详细信息,请访问:http://msdn.microsoft.com/en-us/library/ms228387(v=vs.80).aspx

相关问题