正如您在下面的代码中看到的,DoStuff()方法在构造一个Child对象期间在Init()之前被调用。C#如何在对象构造后执行代码(后构造)
我现在处于一个有许多孩子班的情况。因此,在每个子的构造函数中直接在Init()之后重复调用DoStuff()方法并不是一个优雅的解决方案。
有没有什么办法可以在父类中创建某种类型的构造函数,并在子构造函数之后执行?这样,我可以在那里调用DoStuff()方法。
如果您有任何其他的设计理念可以解决我的问题,我也想听听!
abstract class Parent
{
public Parent()
{
DoStuff();
}
protected abstract void DoStuff();
}
class Child : Parent
{
public Child()
// DoStuff is called here before Init
// because of the preconstruction
{
Init();
}
private void Init()
{
// needs to be called before doing stuff
}
protected override void DoStuff()
{
// stuff
}
}
找到显示构建顺序的链接... http://www.csharp411.com/c-object-initialization/基本上指出您的派生实例构造函数是要做的东西的最后一个。我认为将DoStuff从基类构造函数中提取出来并明确地调用它是最直接的方法,或者提供可以被覆盖的基类Init。 – deepee1
+1:我不知道为什么,但我总是(错误地)认为子构造函数首先被调用;这就是为什么我总是在我的构造函数调用中使用base()。谢谢你教育我。 – NotMe