在父构造函数之前调用子类构造函数

smr*_*iti 5 c#

是否可以在父类的构造函数之前调用子类的构造函数?

有人说使用虚拟方法确实可行,但我找不到办法.

Mar*_*ell 8

在IL中,这是可能的.在C#中:没有.

可以使用virtual运行一个该类型的构造函数前一种方法,但它是气馁和风险.但:

class Foo {
    public Foo() {
        Console.WriteLine("Foo ctor");
        SomeMethod(); // BAD IDEA (calling a virtual method in a ctor)
    }
    protected virtual void SomeMethod() {}
}
class Bar : Foo {
    protected override void SomeMethod() {
        Console.WriteLine("SomeMethod in Bar");
    }
    public Bar() : base() { /* only to show call order */
        Console.WriteLine("Bar ctor");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个坏主意,因为您无法保证子类已准备好进行方法调用.