2016-11-23 55 views
-3

我使用WinForms。在這個應用程序中,我可以顯示VIEW MODE和EDIT MODE,這兩種模式都會顯示不同的面板(Panel ViewPanel,Panel EditPanel)。靜態類與靜態變量的最佳實踐

它們都只創建一次,它們都包含其他控件..(Label s,TextBox es)。

ViewPanelEditPane l沒有顯示在同一時間,所以我需要能夠刪除一個,並添加另一個,使用戶可以看到它。

在其他類中,我有功能&與「編輯」模式交互並可能更改爲「查看」的事件,因此我需要顯示或刪除這些面板。

我已經創建了一個面板(WrapPanel)爲它們的母體,所以我通過將其添加到WrapPanelControlCollection顯示ViewPanelEditPanel。因此,移除面板是容易的,如果我寫:

WrapPanel.Controls.Clear(); 

它將容易地除去任何一個面板被示出,但爲了所需的面板(ViewPanelEditPanel)添加到渦卷我需要從其他引用它類(具有可能需要將顯示從「編輯」更改爲「查看」的事件和功能)。

因此,將這些面板聲明爲「靜態」似乎可以很容易地從任何類引用這些面板。

[我在一些論壇讀避免靜態類,不知道到底爲什麼,我不知道這屬於靜態變量太多。]

是它只是聲明這些變量爲Form1靜態變量的最佳實踐?

(「公共部分Form1類」是所有的WinForms應用程序的默認打開類)

或者是更好的做法,使另一個(非靜態)類 - 例如:

public class VarClass 

,並宣告瓦爾那裏:

public Static Panel ViewPanel; 
public Static Panel EditPanel; 

或第三個選項,以使靜態類 - 例如:

public static class StaticVarClass 

有聲明變量(也與公共靜態「關鍵字)

什麼是性能的最佳實踐和/或者各有什麼親的&反對的?

+0

您需要了解靜態的含義。這些情況並不相同,甚至可能不是你想要的。 –

+0

如果你正在拍攝OOP代碼,最好的做法是根本沒有任何「靜態」。 **尤其是**不可變的公共靜態字段。 –

+0

此外,我不建議您詢問正反兩面的「最佳實踐」,而是建議您從正在開發的項目中抽取一些真實的工作代碼,並將其用於[codereview。]的同行評審。 se] - 如果你濫用靜態和公共領域,審稿人會告訴你一切你夢寐以求知道的爲什麼這是一個壞主意。 –

回答

1

如果您不創建類的對象,並且此類包含一些全局使用的常量,則應該創建靜態類。如果不需要該類的對象,則應選擇靜態類。

如果您的變量僅與某些功能相關,則應該使用靜態變量創建類。有時你想創建一個類的對象並在這些對象之間共享一些信息。對於這種情況,最好的方法是使用靜態共享變量創建非靜態類。

+0

謝謝,我沒有完全理解第一段,我不確定你的意思是'做一個對象一個班'..猜你正在談論面向對象,我剛剛進入。我試圖澄清..我有一個窗體,可以顯示一個視圖模式和編輯模式,這兩種模式將顯示不同的面板。其他類我有事件可以交互並可以將模式從編輯更改爲視圖,所以我需要顯示或刪除這些面板。 – Budapest

+0

刪除很容易,因爲我創建了一個「包裝」(面板),因此ViewModePanel和EditModePanel可以添加到「Wrap」的ControlCollection中,所以刪除只需要「Wrap.Controls.Clear()」,但要添加我需要說哪個面板添加並需要一種方法來在多個類中引用該面板 我希望這澄清了我的情況。 我不知道是否引用面板意味着我創建一個對象,因爲是一個面板是一個對象,但我不重新創建它每次我參考它..我只是引用它,因此它可以放置在包裝(所以用戶可以看到它) – Budapest

+0

我想出你的意思!是的,我有一個情況,我不聲明和一個類的對象,因爲這是一個靜態類。我還有另一個案例(在這個問題中列出的案例),我使用與某些功能有關的變量,所以你的答案真的有幫助!完美的建議,謝謝你。我選擇你作爲答案。 – Budapest