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

问题描述:

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

有人说这确实可以使用虚拟方法,但我找不到这样做的方法。

在IL中,这是可能的。在C#中:不。

可以使用virtual运行在该类型的构造函数之前A型方法,但它是鼓励和风险。但是:

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"); 
    } 
} 

这是一个糟糕的主意,因为你不能保证子类准备的方法调用。

+0

+1令人沮丧! – 2010-07-23 17:21:21

你试图完成什么?也许你可以有一个从基类ctor调用的抽象方法?

+1

您觉得您需要这样做的事实表明您的设计或思维存在一些缺陷。我会建议仔细考虑你尝试这样做的动机。 – NeilDurant 2010-07-23 17:58:20

+0

对,这就是为什么我问这里的目标是什么。 – 2010-07-24 00:55:42