回答
當我在大學攻讀我的CS學位時,我們被告知第二年不要做吸氣劑和二次吸收劑,並且要在第五年做。
我個人的偏好是在絕對需要的地方使用getter和setter,永遠不會有公共變量。
這完全取決於你想完成什麼。
如果您希望超類屬性可以在不被繼承的情況下訪問,那麼您需要聲明公共getter和setter。
另一方面,如果您希望僅當超類繼承時才能訪問成員,則需要聲明受保護的成員。
如果你想要某種形式的驗證,你需要getters和setter。這可以保護超類免受無意的腐敗,即使它是被遺傳的。
檢查前兩名這個問題的答案:
Are getters and setters poor design? Contradictory advice seen
不是一個偉大的回答你的問題,但你顯然關注的編碼良好的面向對象,所以你應該給他們一些思考。
在Java中,我寧願將所有的字段設置爲私有的。如果我真的需要揭露某些東西,我會爲該領域創建一個單獨的受保護的獲得者。 (例如,如果我正在實現的接口需要比我想要在不同級別的實現之間傳遞的更寬的返回類型)。
使用只需單擊鼠標即可生成getters/setters的工具,我從不覺得有必要打破父母/孩子班級之間的封裝。
說到C#端,如果您有一個數據成員(字段或屬性)不是公有的,但對子類有用並且應該可用於讀取和寫入,則將該成員聲明爲受保護的。
如果成員應該由子類可讀不可寫,你可以定義成員作爲被保護的財產,但有私人二傳手:
//as of C# 3.0 this can also be an auto-property
private string myValue;
protected string MyValue
{
get{return myValue;}
private set{myValue = value;}
}
這使得myvalue的從班完全隱藏繼承外層次結構,只讀子類;只有超類本身可以設置該值。這將相當於具有受保護的getter方法和私有setter方法的私有字段。
一般來說,作爲超類的設計者,由您決定子類應該如何使用您提供的內容。如果你做了一些保護,假設子類將做任何「保護」允許他們做的事情。 C#和Java都有可以獨立控制讀取和寫入訪問的可見性的方法。
似乎在C#中,標準做法是使用get/set訪問器的屬性。 在簡化的形式你必須:
public string Name { get; set; }
但是你可能有過的訪問級別更精細的控制,例如:
public string Name { get; protected set; }
在這裏,您公開暴露get方法,但離開集方法僅派生類。
使用訪問器而不是直接訪問數據成員的另一個好處是可以在get/set方法上放置一個斷點並查看誰執行了該方法。
然而,這是不可能的,{ get; set; }
的伎倆。您必須編寫整個擴展屬性表單:
private string m_Name = string.Empty;
public string Name
{
get { return m_Name; } // Put a happy breakpoint here
set { m_Name = value; } // or here.
}
對Java反映相同的概念將是安全的。
- 1. 常量的吸氣和吸氣裝置?
- 2. 陣列中的吸氣和吸氣器
- 3. 計數吸氣器和吸氣器
- 4. 吸氣劑和吸附劑的用途?
- 5. 課堂上的吸氣和吸入器?
- 6. 異步吸氣
- 7. Angular 4中的模型對象的吸氣和吸氣器
- 8. 關於吸氣劑和吸氣劑的問題
- 9. 原型中的吸氣器和吸氣器
- 10. 將吸氣劑/吸氣劑添加到一個基類
- 11. 如何在線程中同步吸氣和吸氣
- 12. 吸氣劑和吸氣劑不工作目標c
- 13. Javadoc沒有爲Lombok吸氣和吸氣器產生
- 14. 沒有吸氣劑
- 15. Rubymotion和Objective C吸氣塊
- 16. IReport和類之間的吸氣器
- 17. 轉換通用吸氣表達反對吸氣式
- 18. Java中的吸氣器
- 19. 組合框的吸氣
- 20. 國家通過吸氣
- 21. 吸氣劑,貼劑,陣列
- 22. SonarQube龍目吸氣識別
- 23. 吸氣劑命名約定
- 24. BindableProperty吸氣返回null
- 25. WPF吸氣多次調用
- 26. 吸氣劑返回NaN
- 27. 爪哇 - 通用吸氣
- 28. Vuex吸氣劑不更新
- 29. 覆蓋-Class屬性 - 吸氣
- 30. Vuex吸氣不會更新
用什麼語言? C#和Java有不同的可用結構來公開值,這可能會影響你如何在兩種語言中執行此操作。 – KeithS 2012-02-22 00:39:24
Duplicate:http://stackoverflow.com/questions/2279662/java-protected-fields-vs-public-getters – 2012-02-22 00:41:51
和http://stackoverflow.com/questions/3525765 – 2012-02-22 00:46:08