Инициализировать свойства в событии загрузки или в конструкторе?

2

У меня есть свойство, которое ссылается на объект уровня сервиса, и мне нужно его каждый раз, когда я использую форму. Какова наилучшая оценка: инициализировать свойство в конструкторе или в событии загрузки формы?

Теги:

5 ответов

3
Лучший ответ

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

2

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

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

Я бы сказал, поместив его в форму Load по этой причине.

  • 0
    Вы правы в том, что вам нужно быть осторожным. Но если устанавливаемые свойства являются инвариантами класса, то это означает, что никакой другой клиент не должен касаться объекта до тех пор, пока эти свойства не будут установлены, и в этом случае конструктор является единственным разумным местом. Следствие: свойства, которые зависят от инициализации во время выполнения, не должны быть инвариантами классов для классов, управляемых дизайнером.
0

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

0

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

0

Конструктор должен нести ответственность за инициализацию, если у вас нет конкретной потребности или зависимости для инициализации вашей переменной в Load Load, например, инициализации ее на что-то, что зависит от чего-то еще.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню