调用基础构造函数传入一个值

时间:2009-06-18 11:12:02

标签: c#

public DerivedClass(string x) : base(x)
{
  x="blah";
}

此代码是否会将值为x的基础构造函数调用为“blah”?

5 个答案:

答案 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)
{ }