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

13

仅调用子类的默认构造函数(如果有), 不要认为它是用其他语言(如Java)完成的。 - TheVillageIdiot
因为它是一个不同的对象。(函数是相同的) - RvdK
2
@KarlKnechtel 因为这样做是有意义的,如果在子类中没有显式定义构造函数,则允许从基类复制构造函数。基类可能具有可以使用构造函数设置的变量,例如(X、Y、Color),这些变量在派生类中不会更改,即构造函数仍然有效。 - user1881400
2
@KarlKnechtel是因为其他所有公共方法都被继承吗? - Tom Dalton
3个回答

19

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

另外,请注意如果您没有显式调用任何带参数的基类构造函数,则将自动运行基类构造函数(无参)。因此,调用base()是多余的。


7

派生类的构造函数会隐式调用基类的构造函数,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

该链接提供有关IT技术的详细信息。

这是对原问题的真正获胜答案。尽管这是一篇旧帖子,但我毫不怀疑地赞同你的回答。你是唯一一个做对了的人。这正是我在寻找的,而且它按照你所描述的方式运作。谢谢。 - OrizG

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接