C# 调用传递值的基构造函数

C# 调用传递值的基构造函数,c#,C#,此代码是否会将值为x的基本构造函数调用为“blah”?否,base在执行构造函数体之前执行调用: public DerivedClass(string x) : base(x) { x="blah"; } 否,基构造函数总是在当前构造函数之前调用。否,它将使用传递到派生类构造函数的值来调用它。基类构造函数总是在执行派生类构造函数的主体之前被调用(显式或隐式)。不,不会。在执行DerivedClass构造函数之前,将在x中向基构造函数传递字符串。这可能会起作用: //pseudocode (

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

否,
base
在执行构造函数体之前执行调用:

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

否,基构造函数总是在当前构造函数之前调用。

否,它将使用传递到派生类构造函数的值来调用它。基类构造函数总是在执行派生类构造函数的主体之前被调用(显式或隐式)。

不,不会。在执行DerivedClass构造函数之前,将在x中向基构造函数传递字符串。这可能会起作用:

//pseudocode (invalid C#):
public Constructor(string x) {
   base(x);
   x = "blah";
}
我不确定这一点,但在调用基本构造函数时,您应该能够调用任何方法/getter,如下所示:

public DerivedClass(string x) : base("Blah")
{ }

基本调用总是先完成,但您可以使其成为静态方法调用。例如:

public DerivedClass(DateTime x) : base(DateTime.Now)
{ }
现在如果你打电话

public Constructor(string x) : base(Foo(x))
{
    // stuff
}

private static string Foo(string y)
{
    return y + "Foo!";
}
然后将使用“Hello Foo!”调用基构造函数


请注意,您不能对正在构造的实例调用实例方法,因为它还没有“准备就绪”。

没有任何方法-只有静态方法。
DateTime。现在,
是一个属性,所以您应该删除paren,但是的,这是可能的。@Jon:。。。或其他对象的实例方法。@Mehrdad-是的,对此很抱歉(这是学习java的效果…@Jon:AFAIK您可以调用任何方法或访问任何对象的任何getter或public字段,而不是您正在构造的对象。我想将长字符串传递给基构造函数,因此使用您的方法是最好的吗?i、 调用一个静态的Foo方法,该方法将返回长字符串文本,并使用该字符串调用基本构造函数。您当然可以这样做-在这种情况下,您真的需要构造函数接受参数吗?在每种情况下都要将相同的字符串传递给基构造函数吗?一个选项是不将其传递给基构造函数,而是使其成为受保护的抽象属性,基类可以在需要时调用该属性。或者,在每个类中都有一个常量字符串,并将其传递到基中。(此时不需要方法调用。)@Jon:只需在“受保护的抽象”解决方案中添加注释:不建议在构造函数中调用非密封类的任何虚拟(或抽象)成员。这背后的基本原理是,派生类中被重写的成员将在派生类的构造函数运行之前运行(并且该类可能处于未初始化状态)。因此,如果被重写的方法依赖于构造函数正确初始化的某些变量,那么它将无法正确运行。是的,我只会在绝对必要的情况下使用大量的相关文档这样做。但是,在构造函数完成之前,可能不需要该属性,在这种情况下,这不是一个问题。
new Constructor("Hello ");