C#不从基类继承构造函数
可能的重复项:C#不从基类继承构造函数,c#,.net,inheritance,constructor,C#,.net,Inheritance,Constructor,可能的重复项: 当定义从基类继承的类时,我必须重新定义它的所有构造函数。 我想知道为什么C#不支持从基类的构造函数继承?构造函数不被继承,因为我们无法正确确定派生类对象是如何实例化的。当所有派生类都隐式使用父类的构造函数时,在我的建议中,这将是一个问题,因为如果我们忘记重新定义构造函数,对象可能已被错误初始化。如果希望派生类构造函数执行与父类构造函数相同的操作,请使用调用它 还要注意,如果不显式调用任何其他带参数的基类构造函数,基类构造函数(无参数)将自动运行。因此调用base()是多余的只
当定义从基类继承的类时,我必须重新定义它的所有构造函数。
我想知道为什么C#不支持从基类的构造函数继承?构造函数不被继承,因为我们无法正确确定派生类对象是如何实例化的。当所有派生类都隐式使用父类的构造函数时,在我的建议中,这将是一个问题,因为如果我们忘记重新定义构造函数,对象可能已被错误初始化。如果希望派生类构造函数执行与父类构造函数相同的操作,请使用调用它
还要注意,如果不显式调用任何其他带参数的基类构造函数,基类构造函数(无参数)将自动运行。因此调用
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;
}
}
有关更多信息,请访问:不要认为它是用任何其他语言(如Java)完成的。只有默认的ctor(如果有的话)是从子类调用的,因为它是一个不同的对象。(函数相同)@KarlKnechtel,因为如果子类中没有显式定义构造函数,则允许复制基类中的构造函数是有意义的。基类可能有可以使用构造函数设置的变量,例如(X,Y,Color),这些变量在派生类中不会改变,即构造函数仍然有效。@KarlKnechtel出于同样的原因继承了所有其他公共方法?这是对原始问题的真正答案。尽管我是一个老帖子,但我毫不怀疑会对你的答案投赞成票。你是唯一正确的人。这正是我要找的,它的工作原理和你描述的一样。谢谢