Вызов базового ctor после дочернего ctor - PullRequest
0 голосов
/ 20 марта 2012

коротко:

Как я могу вызвать базовый ctor после 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;
    }
}

Я не хочу добавлять дополнительный код в дочерний ctor, который вызывает DoReflectionSuff().

Пожалуйста, помогите:)

Спасибо

1 Ответ

0 голосов
/ 20 марта 2012

Вы не можете. Базовый ctor всегда должен запускаться первым.

Возможно, вы захотите взглянуть на шаблон фабричного метода , чтобы управлять построением и конфигурацией, прежде чем получить экземпляр класса. Вы должны использовать фабричный метод для создания экземпляра класса, а фабричный метод всегда гарантирует, что экземпляр настроен правильно перед его возвратом.

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;
    }
}
...