2016-10-07 292 views
-4

早上好,靜態和非靜態方法

我正在使用WindowsForm。我想出了兩個解決方案。我想知道哪種解決方案是最佳實踐?

解決方案1: 我有一個書面的共同靜態方法如電話,文本框驗證,mandatory_textbox-按鍵etc.I有很多這樣的常用方法。所以我所做的是創建了一個實用程序類,並將所有這些方法都放入其中。然後在應用程序中使用這些方法。

解決方案2: 我有一個想法,所以我所做的是我創建了一個音素表示繼承類的話,我繼承了這種基本形式中的所有其他形式的(多層次繼承)。

在baseform中,我將所有的確認方法從Utility類中移出,然後變爲非靜態的。

我也教過UserControl。如果我這樣做,我再次與對齊任務一起工作。所以只有想出了兩種解決方案

所以你可以建議哪些遵循?

+0

http://stackoverflow.com/questions/798036/how-to-decide-between-c-sharp-static-and-non-static-methods?rq=1 – Natrium

+0

http://stackoverflow.com/questions/11027540/should-i-go-with-static-methods-or-non-static-methods?rq = 1 – Natrium

+1

您也可以通過派生自Textbox來創建自定義文本框。 – CSharpie

回答

0

對於是否應該將方法聲明爲靜態方法還沒有直截了當的答案。這取決於您的應用程序的上下文和功能。

一些假設您的具體情況去考慮高級別以下的想法 -

  • 如果驗證是關係到一個特定的形式而已,並不適用於其他形式,你的窗體類答中聲明它私人方法。如果這些驗證不需要任何類實例,則可以聲明它們是靜態的。
  • 如果某些驗證對於不同的表單很常見,則可以將它們聲明爲靜態。請注意,不要將控制權交給這些方法,而是傳遞要驗證的值以實現更好的設計。
  • 考慮宣佈鹼形式驗證只有那些適用於全部或者如果不是大多數的形式,並再次,如果他們不使用任何實例對象,你可以將它們標記爲靜態

好討論here

0

使用用戶控件而不是單獨的窗體,如果這些常用控件正在每個窗體中使用。靜態方法應該用於實用類型的需求。

+0

。如果我這樣做,我再次與對齊任務一起工作。所以只有兩個解決方案 – user2115618

0

前段時間我試着將你所描述的解決方案用於不同的任務。每一個都有自己的優缺點。

  1. 因此,在第一種情況下,我們只有一個ststic類和每個靜態方法在內存中的一個實現。我們可以將此方法應用於任何數量的其他對象實例。但是我們需要在我們將使用它的每個名稱空間中訪問這個類。 因此,如果我們將對此類的任何代碼進行一些更改,它將應用於與此類相關的所有對象實例。有時候很方便,有時候不方便。

  2. 在第二種情況下,我們將得到內存(低效率)基本形式的新實例,但我們也有像第一種方法繼承形式之一基實現的方法。作爲額外的好處,我們總是可以僅針對特定情況下的特殊情況(如果需要)覆蓋方法。

無論如何,只有您可以根據您的任務上下文做出正確的決定。

1

您可以在非靜態類中移動靜態方法,並將具體對象(可能通過接口)傳遞給需要該功能的類/方法。通過這種方式,您可以使代碼易於測試並解耦。

舉例來說,如果您有一個類PhoneNumberValidator實施接口IValidator其方法bool Validate(string phoneNumber),並將其傳遞到需要驗證電話號碼的位置。

我想這應該是最好的做法,有一個分離的應用程序。

+1

害怕Windows窗體開發人員不喜歡這種解決方案,因爲您需要創建更多的類,接口,更改構造函數以在其中傳遞接口實現 - 太多僅用於編寫增加文件量的測試: ) – Fabio

+0

@Fabio問題是關於最佳做法,所以我很抱歉我的回答:) – meJustAndrew