Вызывающий базовый конструктор, передающий значение

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

будет ли этот код вызывать базовый конструктор со значением x как "blah"?

Ответ 1

Основной вызов всегда выполняется первым, но вы можете заставить его вызвать статический метод. Например:

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

private static string Foo(string y)
{
    return y + "Foo!";
}

Теперь, если вы вызываете

new Constructor("Hello ");

тогда базовый конструктор будет вызываться с помощью "Hello Foo!".

Обратите внимание: вы не можете вызывать методы экземпляра для создаваемого экземпляра, поскольку он еще не готов.

Ответ 2

Нет, base вызов выполняется перед выполнением тела конструктора:

//pseudocode (invalid C#):
public Constructor(string x) {
   base(x);
   x = "blah";
}

Ответ 3

Нет, базовый конструктор всегда вызывается перед текущим конструктором.

Ответ 4

Нет, он будет вызывать его со значением, переданным в конструктор производного класса. Конструктор базового класса всегда вызывается (явно или неявно) до выполнения тела конструктора производного класса.

Ответ 5

Нет, не будет. Базовому конструктору будет передана строка в x до выполнение конструктора DerivedClass. Это может работать:

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

Я не уверен в этом, но вы должны иметь возможность вызвать любой метод /getter при вызове базового конструктора, например:

public DerivedClass(DateTime x) : base(DateTime.Now)
{ }