在孩子之后打电话给基地

时间:2012-03-20 17:12:12

标签: constructor init base

很简短:

如何在子类ctor之后调用base ctor,而不在子类ctor中添加额外的代码?

整个故事:

我有一个基类ctor,它通过反射循环其子项的属性。 唯一的问题是必须在初始化之后调用它,这发生在子类ctor中。

public class Parent
{
    public Parent()
    {
        DoReflectionStuff();
    }

    private void DoReflectionStuff()
    {
        // Do reflection stuff on child's properties
    }
}

public class Child : Parent
{
    public string Name { get; private set; }

    public int Age { get; private set; }

    public Child(string Name, int Age) : base()
    {
        this.Name = Name;
        this.Age = Age;
    }
}

我不想在调用DoReflectionSuff()的子ctor中添加额外的代码。

请帮助:)

谢谢

1 个答案:

答案 0 :(得分:0)

你不能。基本ctor总是必须先运行。

您可能需要查看factory method pattern以便在获取类的实例之前控制构造和配置。必须使用工厂方法构造类的实例,并且工厂方法始终确保在返回实例之前正确配置实例。

public abstract class Parent
{
    protected Parent(){}

    private void DoReflectionStuff()
    {
        // Do reflection stuff on child's properties
    }

    public static T Create<T>() where T : Parent
    {
        var temp = Activator.CreateInstance<T>();
        temp.DoReflectionStuff();
        return temp;
    }
}