【发布时间】:2011-06-22 05:33:55
【问题描述】:
这是一个相当基本的 OO 问题,但一直困扰着我一段时间。
我倾向于避免对我的字段和方法使用“私有”可见性修饰符,而使用protected。
这是因为,一般来说,我认为隐藏基类和子类之间的实现没有任何用处,除非我想为我的类的扩展(即在框架中)设置特定的指导方针。在大多数情况下,我认为试图限制我或其他用户扩展我的课程的方式是没有好处的。
但是,对于大多数人来说,private 修饰符通常是定义非公共字段/方法时的默认选择。
那么,您能列出private 的用例吗?总是使用私人有一个主要原因吗?还是你也认为它被过度使用了?
【问题讨论】:
-
我同意你的想法。请注意,在 Objective C 中,它们默认受到保护。
-
有些人建议将“YAGNI”[你不需要它]作为将字段设为私有的理由,但我不同意这一点。 YAGNI 背后的一般原则是,如果一个人需要什么,那么就可以担心它。一个合理的想法,但如果最终需要某些东西的人与任何可以提供它的人没有联系,它就行不通。例如,有一个类可以被任何需要
List<T>的代码使用,但也包括像ActOnItem(int index, ref T item)这样的方法来允许“就地”更新列表项。 -
如果
List<T>的backing store是protected,这样的方法可以相当容易地实现;不幸的是,因为它不是,所以没有办法编写兼容的List<T>替换,包括这样的方法。 -
好点。每当您打包某个软件并将其提供给公众时,用户将如何扩展它并不总是很明显
标签: oop visibility private protected