自动构建后初始化

时间:2016-03-17 10:55:54

标签: c# reflection

不应在基类的构造函数中调用

virtual方法,因为未调用派生类的构造函数,因此不会调用所有初始化逻辑。

我想知道是否有一种方法可以在完全构造对象后自动调用方法。 我不想将调用初始化方法的责任推到用户身上。

假设我有以下

public abstract class Foo
{
  protected Foo()
  {
    ...
    AfterConstruction();
  }

  protected virtual void AfterConstruction(){}
}

public class Bar : Foo
{
  protected override void AfterConstruction()
  {
    ...
  }
}

我知道不应该这样做,我想也许可以通过使用反射观察对象构造然后在构造完成后挂钩来调用函数AfterConstruction()来解决这个问题。 但我找不到合适的代码。

感谢您的想法

1 个答案:

答案 0 :(得分:0)

如果我错过了一些重要细节,请告诉您,但根据您的课程何时被视为完全初始化,您有多种选择。 此外," After Constructor"与构造函数中的最后一行相同(通常无论如何),你的逻辑中是否有任何内容与之相矛盾?

如果可以在您正在制作的课程内完成全班初始化:  1.在构造函数的末尾或初始化类的任何地方调用它。  2.在基础构造函数之后在子类中调用它。这将确保初始化基类。

如果您无法在自己的类中实现完整的类初始化,换句话说,如果您的类仅在用户初始化某些参数后被视为已初始化 - 您别无选择,只能将至少1个方法调用留给创建者。你的孩子班。

在子类构造函数之前将调用基类的默认构造函数: 简单的代码测试:

class Program
 {
     static void Main(string[] args)
     {
         new Bar();
     }
 }


class Foo
{
    public Foo()
    {
        MessageBox.Show("Foo");
    }
}

class Bar : Foo
{
    public Bar()
    {
        MessageBox.Show("Bar");
    }
}

输出:

  

MessageBox:" Foo"

     

MessageBox:" Bar"