关于构造函数继承的C#:
这些陈述是否更正?
答案 0 :(得分:14)
是的,你是对的,构造函数不是继承的。因为Object
具有无参数构造函数,这并不意味着String
具有无参数构造函数。来自C#4规范的第1.6.7.1节:
与其他成员不同,实例构造函数不是继承的,并且除了在类中实际声明的实例之外,没有实例构造函数。如果没有为类提供实例构造函数,则会自动提供没有参数的空构造函数。
是的,派生类构造函数的构造函数链将始终通过其基类构造函数...虽然它可能是间接的,因为它可以通过this(...)
链接到同一个类中的另一个构造函数而不是base(...)
。如果您未指定this(...)
或base(...)
,则相当于base()
- 在基类中调用无参数构造函数。
有关详细信息,请参阅我的article on constructor chaining。
答案 1 :(得分:1)
1。 不能继承构造函数,但可以链构造函数。例如:
public class DerivedClass : BaseClass {
public DerivedClass(object arg):base(arg){}
}
2。是的,例如,您无法实例化一个派生自具有所有私有构造函数的对象的类(除了Jon在其评论中提到的特定场景中)。您不能跳过基类的构造函数,但可以有多个重载,并选择您选择使用的构造函数。
3。是的,不确定这里的问题是什么。
答案 2 :(得分:0)
1是
2你不能跳过构造函数,但我认为你在默认构造函数中什么都不做。就像
public class PClass {
protected PClass() {
// do nothing
}
public PClass(int myIntArg) {
// initialize the class
}
}
public Class CClass : PClass {
public CClass(string myStringArg) : base() {
// initialize the class
}
}
3是的。请参阅我之前的示例。