Вы не можете напрямую "вставить" вызов метода перед вызовом конструктора базового класса, потому что он вызывает метод для неинициализированного объекта.Но вы можете использовать шаблон шаблона pattern:
abstract class A {
protected A () {
BeforeTest ();
Test ();
}
protected abstract void BeforeTest ();
private void Test () {
Console.WriteLine ("2");
}
}
class B : A {
protected override void BeforeTest () {
Console.WriteLine ("1");
}
}
internal class Program {
public static void Main (string [] args) {
new B ();
}
}
В качестве альтернативы вы можете сделать Test
метод виртуальным:
abstract class A {
protected A () {
Test ();
}
protected virtual void Test () {
Console.WriteLine ("2");
}
}
class B : A {
protected override void Test () {
Console.WriteLine ("1");
base.Test ();
}
}
internal class Program {
public static void Main (string [] args) {
new B ();
}
}
В обоих примерах выводится один и тот же результат:
1
2