2016-11-23 2 views
-3

Я использую WinForms. В этом приложении я могу показать РЕЖИМ VIEW и EDIT MODE, оба режима будут отображать другую панель (Panel ViewPanel, Panel EditPanel).Статический класс по сравнению с статическими переменными лучшая практика

Они оба созданы только один раз, и оба они содержат другие элементы управления .. (Label s, TextBox es).

Но ViewPanel и EditPane l не отображаются одновременно, поэтому мне нужно уметь их удалить и добавить, чтобы пользователь мог его увидеть.

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

Я создал панель (WrapPanel), чтобы быть их родителем и поэтому я отображения ViewPanel или EditPanel путем добавления его к ControlCollection в WrapPanel. Поэтому удаление панели легко, если я пишу:

WrapPanel.Controls.Clear(); 

Он легко удалит любую панель показывает, но для того, чтобы добавить нужную панель (ViewPanel или EditPanel) витки мне нужно ссылаться на него из других классы (которые имеют события и функции, которые могут потребовать изменить отображение с «Правка» на «Вид»).

Таким образом, наличие этих панелей, объявленных где-то как «статические», позволяет легко ссылаться на эти панели из любого класса.

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

Это лучшая практика, чтобы просто объявить эти переменные как статические переменные в Form1 ?

(«общественный частичный класс Form1» является классом открытия по умолчанию для всех приложений WinForms)

Или лучше практика, чтобы сделать еще один (не статический) класс -для примера:

public class VarClass 

и объявить Vars там:

public Static Panel ViewPanel; 
public Static Panel EditPanel; 

Или третий вариант, чтобы сделать статический класс - например:

public static class StaticVarClass 

и объявить переменные там (также с «публичным статическим» ключевым словом)

Что является лучшей практикой для выполнения и/или какие профи & кона-х каждый из них?

+0

Вам нужно прочитать, что на самом деле означает статичность. Эти ситуации не эквивалентны и могут даже не быть тем, что вы намереваетесь. –

+0

Если вы снимаете код ООП, наилучшей практикой было бы не иметь ничего «статического» вообще. ** Особенно ** не изменяемые публичные статические поля. –

+0

Кроме того, вместо того, чтобы просить «за» и «против» и «что лучше всего», я предлагаю вам взять какой-то реальный рабочий код из проекта, над которым вы работаете, и выставить его для рецензирования на [codereview. se] - если вы злоупотребляете «статическими» и публичными полями, рецензенты расскажут вам все, о чем вы когда-либо мечтали узнать о том, почему это плохая идея. –

ответ

1

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

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

+0

спасибо, я не полностью понял первый абзац, я не уверен, что у означает «сделать объект класс .. Предположим, вы говорите о ООП, к которому я просто вхожу. Я пытаюсь уточнить. У меня есть форма, которая может отображать VIEW MODE и EDIT MODE, оба режима будут отображать другую панель. другие классы У меня есть события, которые взаимодействуют с и могут изменять режим от Edit to View, поэтому мне нужно будет отображать или удалять эти панели. – Budapest

+0

Извлечение легко, так как я создал «Wrap» (панель), поэтому ViewModePanel и EditModePanel могут быть добавлено в ControlCollection «Wrap». Поэтому удаление просто нужно «Wrap.Controls.Clear()», но для добавления мне нужно сказать, какую панель добавить, и вам нужен способ ссылаться на эту панель в нескольких классах. Надеюсь, это уточняет мою ситуацию. Я не уверен, что если ссылаться на Panel означает, что я создаю объект, потому что Да панель является объектом, но я не создаю ее каждый раз, когда ссылаюсь на нее. Я просто ссылаюсь на нее, чтобы ее можно было разместить на Оберните (так что пользователь может это увидеть) – Budapest

+0

Я понял, что вы имели в виду! Да, у меня есть один случай, когда я не объявляю и объект класса, как статический класс. И у меня есть другой случай (тот, который указан в этом вопросе), где я использую переменные, связанные с некоторыми функциями, и поэтому ваш ответ действительно помог! Прекрасный совет, спасибо за это. Я выбрал вас в качестве ответа. – Budapest

Смежные вопросы