如果我对一个类中的属性使用单个前导下划线,那么从另一个对象访问它是不对的?是一个单下划线说“我会按照我的意愿使用它,但是用户不应该触摸它”或者甚至开发人员应该将其视为私有吗?
答案 0 :(得分:6)
单个下划线表示不是公共消费;我们欢迎同一个软件包中的代码戳戳并生成它。
答案 1 :(得分:1)
我认为你应该尽可能地避免这样做,因为它打破了封装,这是面向对象范式的一个好处。虽然有些人认为某些更高级别的范围,例如模块或包,但是我发现即使在单个类的各种方法中也避免这样做是有用的经验法则 - 至少如果它相当复杂,那么微妙,或者只是一个方面,我想我可能想稍后改变。
原因是每次你用一个对象做一些事情,你就会在一个对象的内部和你编码的位置之间创建一个依赖关系,无论是同一个对象或模块的另一部分还是其他什么。这就越多,以后维护或增强事物就越难。
需要考虑的另一个方面是,无论何时您需要这样做,都可能表明需要更好的设计 - 因此您可以将其视为警告标志并做出相应的反应。
创建用于执行处理内部细节的操作的接口通常意味着必须设计和实现更多代码,而不是这样做。因此,在每种情况下,必须将收益与成本进行权衡,以确定它是否值得。最终经验(以及正在进行的教育)使这些决定更容易,甚至可能是本能的。