InitializeComponent в обоих конструкторах или в одном с наследованием конструктора? - PullRequest
3 голосов
/ 12 февраля 2009

Есть ли практическая разница с точки зрения воздействия на компонентную модель между:

class MyComponent : Component {
    public MyComponent() {
        InitializeComponent();
    }

    public MyComponent(IContainer container) {
        container.Add(this);
        InitializeComponent();
    }
}

и

class MyComponent : Component {
    public MyComponent() {
        InitializeComponent();
    }

    public MyComponent(IContainer container) : this() {
        container.Add(this);
    }
}

и если нет, то почему Microsoft выбрала первый метод для своего сгенерированного дизайнером кода?

Редактировать: Я имею в виду, будут ли какие-либо побочные эффекты в отношении изменения порядка между инициализацией компонента и добавлением его в контейнер?

Ответы [ 2 ]

3 голосов
/ 12 февраля 2009

Порядок исполнения отличается. В

public MyComponent(IContainer container) {
    container.Add(this);
    InitializeComponent();
}

InitializeComponent() выполняется после container.Add(), тогда как здесь

public MyComponent(IContainer container) : this() {
    container.Add(this);
}

container.Add() выполняется после InitializeComponent()

0 голосов
/ 12 февраля 2009

Я полагаю, что порядок вызова будет отличаться между двумя. Я верю во второй, сначала вызывается this (), а затем содержимое метода. Это означает, что InitializeComponent () будет вызываться перед контейнером. Добавить.

Хотя это не может иметь большого значения, тем не менее, это разница.

...