2011-10-05 89 views
3

如果我有在C#中Utilities.cs類,其中只包含靜態方法決定做一個C#類的靜態

例如

public static string DoSomething() 
{ 
    return "something"; 
} 

我應該讓這個類本身是靜態的嗎?

public static Utilities() 
{ 
    ... 

做靜態類有什麼好處?

回答

11

是的,你應該。它阻止人們在不應該實例化類的時候,並且使類更清晰。閱讀the MSDN page for more information

您還需要將類標記爲靜態的,如果你想添加Extension Methods

你應該仔細考慮的實用工具類。想想這些方法是否真的屬於那裏,或者是否有更多的面向對象方法。

也看看這個question和Jon Skeet的答案。

+0

謝謝,擴展方法不是我想到的 – finoutlook

1

是的,你應該把它變成靜態的。使其變爲靜態可以防止它被實例化。它主要是爲了告訴使用類的人它只包含靜態方法,這有助於可讀性。

6

主要優點是它使您的設計意圖更清晰,並強制執行這些意圖。例如,你不能從一個靜態類繼承(即專門化它),並且你不能創建它的一個實例(它實際上是一個單例)。這些都是您的公用事業類的設計意圖。

但是,應該謹慎使用靜態類和方法,因爲它使得很難改變程序的行爲。靜態類和方法非常具體,不能(很容易)被替換,就像你使用接口和構造器注入一樣。靜態類和成員可以很有用,但很少。靜態過度使您的軟件變得更加靈活,並且更難以測試。

+0

是的,實用程序類聽起來應該是一個單身,所以應該是靜態的(關注這種方法)。 – finoutlook

1

只有該靜態類不能包含非靜態成員,所以防止您意外添加它們。正如雷的回答中所提到的,它會讓你的代碼更清晰。