可能的重复问题:
构造函数和继承
为什么构造函数不能被继承?
当我定义从基类继承的类时,我必须重新定义所有构造函数。 我想知道为什么C#不支持从基类继承构造函数?
可能的重复问题:
构造函数和继承
为什么构造函数不能被继承?
当我定义从基类继承的类时,我必须重新定义所有构造函数。 我想知道为什么C#不支持从基类继承构造函数?
构造函数不会被继承,因为我们无法正确确定派生类对象的实例化方式。如果所有派生类都隐式使用父类的构造函数,那么问题就来了,因为如果我们忘记重新定义构造函数,对象可能会被错误地初始化。如果您希望派生类构造函数与父类构造函数执行相同的操作,请使用base调用它。
另外,请注意如果您没有显式调用任何带参数的基类构造函数,则将自动运行基类构造函数(无参)。因此,调用base()
是多余的。
派生类的构造函数会隐式调用基类的构造函数,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技术的详细信息。只有成员变量和成员方法可以从一个类继承到派生类。