2015-12-22 76 views
-3

我有以下類:這裏是靜態的嗎?

public class Example 
{ 
    public static string GetName(string username) 
    { 
     //Code to retrieve record from database 
     return RetrievedString; 
    } 
} 

我使用它來獲取用戶的姓名給需要它的一些功能(將用戶名在會議上就登錄e.g等)。

該代碼有效。我的困惑是,如果將它作爲一個靜態字符串是否正確,或者是否應該將其設置爲非靜態並初始化一個對象並將GetName用作屬性來檢索字符串是正確的。

請記住,多個用戶將同時聯機。

+0

最好不要有有代碼訪問數據庫的靜態方法。你可能遇到處理資源的問題(例如:連接等)。看到這個答案更多關於爲什麼你有一個壞主意=> http://stackoverflow.com/a/21414281/325521 – Shiva

+2

這是你的答案:[靜態變量與靜態方法](http://stackoverflow.com /問題/ 11402907 /差靜態變量和靜態的方法間)。希望這可以消除你們之間的混淆。 – Prabhat

+0

@SuprabhatBiswal我知道兩者之間的區別。我的困惑是,由於RetrievedString是依賴於輸入字符串的用戶名,它始終是唯一的(然後在SELECT [Name] FROM [Talbe] WHERE Name = @username中使用),是否有一個原因,這不應該是靜態的? – user4483037

回答

0

請記住,static表示當前字段/屬性/方法是類型的成員,而不是實例。靜態成員在類型級別上存在,並在類型的所有實例之間共享。

通常你不想在靜態成員中存儲任何應該是唯一的東西。良好的使用案例是連接工廠,它們具有靜態訪問但生成唯一連接。

在你的例子中,這一切都取決於實現 - 這基本上是一個輔助類,使它可用,你必須通過它內部的所有連接邏輯。這似乎不是一個好主意,特別是如果你想模擬連接/結果。如果你真的想使它成爲靜態的,我會在你的連接對象上使用擴展方法,這樣它很容易使用,並讓它具有可連接和可注入的連接。