2017-02-05 41 views
-1

我有一個幫助器類,它接收一些對象,對其進行處理並返回其他類的一些實例甚至對象的列表。 什麼是最好的方法:使這個輔助方法是靜態的還是非靜態的? 問題是,我的應用程序可以創建大量的Car對象,我在考慮當它們每個使用靜態助手時它是否會產生負面影響?在助手類中使用靜態方法與非靜態方法

+0

您是否有一些示例代碼,以幫助您對問題給出最合適的答案 –

+1

@ J.Doe Yup。你的車可能會爆胎。笑話分開,你能告訴我們一些代碼嗎? – CKing

+0

當你測試你的課堂(原來的,而不是輔助課堂)時,你是否需要模擬一些功能?如果是這樣,你不應該使用靜態方法。 –

回答

1

大多數幫助程序或實用程序類都使用靜態方法。如果你想創建你的助手類的多個實例,你應該只使用非靜態方法,但因爲你只需要一個簡單的輸入 - >函數 - >輸出,所以我會使這些方法成爲靜態的。

+0

這是錯誤的。只有在有充分理由讓它們變成靜態時,才應該使用靜態類/方法,而不是相反。 –

+1

@shay__像它是一個幫助者的方法,不涉及任何狀態或需要被覆蓋? –

+0

@shay__工具類通常是靜態的。爲單個不相關的方法實例化一個對象是多餘的。他的建議沒有錯,你誤解了它。 – Stavm

1

也許這是可以解決的問題,而不需要決定幫助對象的生命週期。

你應該儘量利用依賴注入的方法:

public class X 
{ 
    public X(IHelper helper) 
    { 
     Helper = helper; 
    } 

    private IHelper Helper { get; } 

    public void DoStuff() 
    { 
     var result = Helper.DoOtherStuff(input); 
    } 
} 

也就是說,X不知道是否助手總是相同的情況下,或者如果它是一個短暫的對象。這使得代碼更加清晰並且更加友好,因爲您可以用僞造的IHelper實現來嘲笑幫手,以確保您只是在測試X

+1

我會在你的例子中將類型改爲IHelper以強調'X'和它的幫助器之間沒有耦合 –

+0

@shay__我想過要做到這一點......我可以改變它,沒問題.. –

0

對靜態方法使用靜態類,沒有實例,沒有派生,只有靜態方法在類中。

public static class HelperClass 
{ 
    public static void HelperMethod() 
    { 
     // do something 
    } 
}