回答
当我在大学攻读我的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