很简短:
如何在子类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中添加额外的代码。
请帮助:)
谢谢
答案 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;
}
}