何時應該傳遞參數給對象的構造函數?您使用哪些標準將它們傳遞給構造函數而不是對象方法中的參數?OOP對象構造函數參數
回答
通常,在使用new
關鍵字實例化類時,將參數傳遞給類構造函數(這可能因語言而異)。
例如(選擇了對C /的Java/C#風格在這裏)
MyClass class = new MyClass(arg1, arg2, arg3);
在重新閱讀你的問題,我傾向於使用構造函數的參數爲絕對需要的資源。這樣,你就知道你的對象必須有某些可用的屬性或資源。
基本上你想要在構造器中初始化對象的所有基本構建塊。 但有時,該對象包含許多元素,從而使構造函數的參數列表太長。 我遵循以下指導原則:如果構造函數的參數列表多於5個元素,則將新對象的初始化分爲構造函數參數&設置方法。
將事情傳遞給構造函數,它們是對象的不可變屬性。如果可能,請使所有對象屬性不可變。充分考慮到這一點,這可以使整個對象不可變。
在構造時分配的不可變屬性避免了各種競爭條件(特別是在多線程環境中),並有助於確保對象始終一致,從而消除了多種錯誤的可能性。通過強制在構建時定義屬性,可以避免大量的錯誤檢查代碼。一旦整個對象不可變,就有機會共享等價對象,提高內存性能。
如果一個參數不是對象的不可變屬性,那麼在構造函數中指定它只是一個方便。一般來說,它應該被賦予一個setter來減少代碼的複雜性(因爲無論如何setter都是必需的)。如果構造函數經常被調用,那麼參數的方便可能值得這個額外的複雜性。
不可變?像數據庫連接到模型對象?謝謝。 – thom
不可變意味着對象不能以呼叫者可見的方式改變。如果我要求一個不變的字符串作爲其第三個字符,那麼這將是字符串整個生命週期的第三個字符。可變字符串是可以隨時間變化的字符串。諸如緩存之類的內部數據結構不是可變性的一部分,因此它並不意味着對象的文字內存不會改變。但是從外部世界來看,對於同樣的問題你總能得到同樣的答案。 http://en.wikipedia.org/wiki/Immutable_object –
- 1. 帶構造函數參數的模擬構造函數對象...對象
- 2. 構造函數中的對象參數
- 3. php oop構造函數
- 4. 構造函數\析構函數或對OOP的理解
- 5. 構造函數對象
- 6. 函數對象和構造
- 7. 構建其他對象構造函數的對象構造函數
- 8. 沒有參數的構造函數或參數構造函數
- 9. 無參數構造函數調用2參數構造函數
- 10. 抽象參數構造函數
- 11. 重構用於新對象的構造函數參數?
- 12. 構造函數具有抽象類的對象作爲參數
- 13. oop行爲類似構造函數參數類型的類
- 14. 對構造函數參數的限制
- 15. 發送SqlDataReader對象來構造函數參數構造函數的參數錯誤
- 16. 數組作爲對象的構造函數參數
- 17. 構造函數有參數的對象數組
- 18. 構造函數的參數是對象的數組
- 19. 對象構造函數的C++數組
- 20. OOP - 是否需要構造函數?
- 21. 靜態類C#構造函數OOP
- 22. C++ OOP類和構造函數
- 23. OOP,構造函數不工作
- 24. OOP,依賴注入和構造函數
- 25. 與構造函數參數
- 26. 從構造函數參數
- 27. 構造函數的參數
- 28. TabStopSpan.Standard構造函數參數
- 29. 構造函數的參數
- 30. 參數類構造函數
「...需要的資源......」我想過但不知道:) – thom