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

use*_*949 9 .net c# inheritance constructor

可能的重复:
构造函数和继承
为什么构造函数不被继承?

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

nan*_*nan 16

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

还要注意,如果不调用显式获取参数的任何其他基类构造函数,则会自动运行基类构造函数(无参数).所以打电话base() is redundant.

  • "构造函数不是继承的,因为我们无法正确确定派生类对象的实例化方式." 这对我来说没有意义.谁是'我们',什么时候'我们'试图'确定我们的派生类对象如何实例化'?这与**隐式继承的类上的所有其他公共方法有什么不同? (4认同)
  • @nan我只是厌倦了用长参数列表制作空构造函数只是为了向上传递这些参数.这样可以让生活更加轻松.也许我会给C#团队一个暗示.也许他们会在C#7中添加它.或者可能不是:( (3认同)

Pra*_*nav 5

派生类的构造函数隐式调用基类或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;
    }
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请访问:http : //msdn.microsoft.com/zh-cn/library/ms228387(v=vs.80).aspx