在构造完所有子类之后,如何在超类中执行某些代码?

Thi*_*uda 7 .net c# vb.net oop

有没有办法在C#中做到这一点?我知道子类在调用自己的构造函数之前会调用超类构造函数,但是如果我在超类上有一些代码只能在所有子类构造函数被调用之后执行呢?

Chr*_*lor 3

实现此目的的一种方法是进行两阶段构造和初始化。因此,您构造实例,然后调用初始化方法,该方法以适当的顺序调用基类初始化

class MyBase
{
  // Only if need to do some core initialization
  public MyBase()
  {
  }

  public virtual Initialize()
  {
    // do some initialization stuff here
  }
}

class MyDerived : MyBase
{
  // Only if need to do some core initialization
  public MyDerived()
  {
  }

  public override Initialize()
  {
    // do some initialization stuff here

    // Call the base class initialization function
    base.Initialize();
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您选择两遍创建/初始化,我建议使用工厂方法或 Asbtract Factory 以确保初始化语义不会遍布整个代码。 (3认同)