Вызывающий базовый конструктор, передающий значение
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)
{ }