public DerivedClass(string x) : base(x)
{
x="blah";
}
此代码是否会将值为x的基础构造函数调用为“blah”?
答案 0 :(得分:34)
基本调用始终先完成,但可以使其调用静态方法。例如:
public Constructor(string x) : base(Foo(x))
{
// stuff
}
private static string Foo(string y)
{
return y + "Foo!";
}
现在,如果你打电话
new Constructor("Hello ");
然后将使用“Hello Foo!”调用基础构造函数。
请注意,无法调用正在构造的实例上的实例方法,因为它尚未“准备就绪”。
答案 1 :(得分:4)
不,base
调用我们在执行构造函数体之前执行:
//pseudocode (invalid C#):
public Constructor(string x) {
base(x);
x = "blah";
}
答案 2 :(得分:1)
不,总是在当前构造函数之前调用基础构造函数。
答案 3 :(得分:0)
不,它将使用传递给派生类构造函数的值来调用它。在执行派生类构造函数的主体之前,总是调用(显式或隐式)基类构造函数。
答案 4 :(得分:0)
不,它不会。在执行DerivedClass构造函数之前,基本构造函数将在x 中传递字符串。这可能有效:
public DerivedClass(string x) : base("Blah")
{ }
我不确定这一点,但你应该能够在调用基础构造函数时调用任何方法/ getter,就像那样:
public DerivedClass(DateTime x) : base(DateTime.Now)
{ }