我有一堆(可能是10到15)在我的C#代碼中的所有這些都是'靜態'。顯然,它們都是用ClassName調用的。一切運作良好。但是,它們以這種方式使用它們有什麼優點/缺點嗎?或者如果我不爲我的方法使用「靜態」,我會獲得任何性能優勢嗎?什麼時候使用C#中的'靜態方法'
1
A
回答
4
從技術上講,使用靜態方法會帶來輕微的性能優勢,因爲執行方法時無需將實例引用加載到堆棧。但那是你不會注意到的非常小的優化。
從編程的角度來看,靜態方法很難模擬,它們在代碼中引入了強大的耦合。在使用靜態方法時,您也會失去抽象和多態性的好處。
您可以從不使用實例數據的實例方法創建靜態私有方法。但是公共靜態方法通常會給你帶來模擬和依賴注入的問題,所以通常我會避免它們。一個例外是用於創建類的實例的工廠方法 - Loan.CreateLongTermLoan
(因此,您不能在C#中使用具有自定義名稱的構造函數,但您需要描述創建實例的詳細信息的描述性名稱)或Loan.Parse
。
2
1
靜態與否都沒有性能優勢。
如果您不需要某個方法中的類的實例,那麼它將被標記爲static
。
1
靜態方法的問題出現在你需要一個子類的時刻。
靜態方法不能在子類中重寫,因此你的新類不能提供方法的新實現,使它們不太有用。
1
這是一個概念性問題。方法...
- 屬於一個特定實例?那麼它不是靜態的。
- 屬於類而不是特定的實例?那麼它是靜態的主要候選者。
請注意,靜態方法無法訪問對象的實例成員(非靜態成員)。
相關問題
- 1. 什麼時候應該使用靜態方法?
- 2. 什麼時候應該使用公共靜態方法
- 3. 什麼時候應該在基類中聲明靜態方法?
- 4. 什麼是C#中的「靜態方法」?
- 5. 什麼時候應該寫靜態方法?
- 6. 你什麼時候使用新方法?
- 7. 什麼時候使用initWithCoder:方法?
- 8. 什麼時候使用getX方法
- 9. 什麼時候在PHP中使用靜態類?
- 10. 什麼時候在PHP中使用靜態修飾符
- 11. C#多態 - 爲什麼&什麼時候
- 12. 你什麼時候使用新的動態GORM方法findOrSaveBy/Where?
- 13. 什麼時候我們應該去java中的靜態類,變量和方法
- 14. 什麼時候可以使用靜態對象引用
- 15. 什麼時候應該在一個類中使用靜態方法,並且有什麼好處?
- 16. 爲什麼說方法不是靜態時它是靜態的?
- 17. 當靜態方法無法從靜態上下文中引用非靜態方法時,這意味着什麼?
- 18. 什麼時候在C#中使用類?
- 19. 什麼時候在C++中使用「declare」?
- 20. 什麼時候使用靜態變量更好?
- 21. 什麼時候使用靜態變量和自我關鍵字
- 22. 你什麼時候需要使用晚期靜態綁定?
- 23. 什麼時候是在C#中調用的靜態構造函數?
- 24. 非靜態類中的靜態方法和靜態類中的靜態方法有什麼區別?
- 25. C#中的靜態方法?
- 26. C++中的靜態方法
- 27. 什麼時候ConvertBack方法被調用?
- 28. 什麼時候會調用getPlaceholderTemplateForComplication()方法?
- 29. 什麼時候調用SQLiteOpenHelper方法?
- 30. 什麼時候調用layoutSubviews方法?
這個問題可能有點哲學。事情是 - 你不能清楚地回答這個問題,而不知道你的軟件設計。 – TGlatzer
而不是一個優點 - 缺點是這可以使你的代碼有點難以進行單元測試。你不能在你的代碼中注入靜態類,所以很難模擬。 – Paddy
這裏有一些很好的答案:http://programmers.stackexchange.com/questions/111938/which-is-a-better-practice-helper-methods-as-instance-or-static – Paddy