Является ли использование статического свойства в форме плохой практикой, зная, что существует только один экземпляр формы?

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

Но это быстро становится слишком сложным.
Я думаю сделать это свойство Static в форме, зная, что в приложении есть только один экземпляр этой формы.

Можно ли использовать это свойство как статическое в этом случае? Или это плохая практика, даже если есть только один экземпляр формы.


person French Boy    schedule 03.09.2011    source источник


Ответы (3)


Просто спросите себя: относится ли это к форме или к типу формы. Гипотетически, если бы было более одной формы, были бы все они доступны только для чтения/не одновременно? Или это будет по форме?

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

person Marc Gravell    schedule 03.09.2011
comment
На самом деле это связано с формой и преобразованием ее в статическую просто для того, чтобы упростить работу с ней, вместо того, чтобы передавать ее (или доступ к ней) везде. - person French Boy; 03.09.2011
comment
@FrenchBoy звучит так, будто делает что-то уродливое, чтобы быть ленивым, имхо - person Marc Gravell; 03.09.2011
comment
@FrenchBoy это, вероятно, работает, но это не делает его хорошей идеей, особенно с точки зрения обслуживания и тестирования. - person Marc Gravell; 03.09.2011

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

person Darin Dimitrov    schedule 03.09.2011

Вот альтернативное решение:

  1. Добавьте элементы управления в форму, как обычно
  2. Создайте интерфейс с именем IReadOnlyToggable, который имеет свойство IsReadOnly, и позвольте форме реализовать его.
  3. Добавьте следующее свойство к своим пользовательским элементам управления:

код:

public bool IsFormReadOnly
{
    get 
    {
        var form  = ParentForm as IReadOnlyToggable;
        return form != null && form.IsReadOnly;
    }
}
person jgauffin    schedule 03.09.2011