当我们实现现在不在我们团队解决方案中的其他类使用的方法时,Access修饰符应该是公共还是私有? 我相信“公众成员说这个成员代表了这个对象提供的关键,记录的功能。”我们只使用私有的“实现细节”方法和所有可能在将来有用的方法我们应该公开,即使现在我们的方法在其他类中没有消费者。但我的对手说这种方法应该是私人的。你觉得怎么样?
添加了: 让我们更具体一点。例如,有一个类SqlHelper。 其中有一些用于SQL Server操作的有用功能。 特别是使用了与SQL服务器的连接。但不仅仅是在那个班级。
例如,我需要实现公共静态HandleSqlExeption方法(现在仅用于类SqlHelper),它将处理SqlExeptions。但我希望在所有类中,在异常处理中有SQL连接的操作将使用此方法(而不是它很简单,例如: catch(Exception){MsgBox {“SqlError”}; 因为某处现在发生了。所以我认为公共访问修饰符会告诉其他同事他们可以使用这种方法。而私人将隐藏这种方法。如果有人要求使用tsuch方法,我将需要ti更改代码和重新组装。为什么?只有负面因素。
答案 0 :(得分:10)
通常,您应该使用尽可能少的许可访问修饰符进行编码。
private
。protected
。internal
。public
。这有助于information hiding,并允许您随意更改实施。
我听说这被描述为保护你的私人。
就API设计而言,您应该拥有一个完整的API,将所有逻辑功能公开为public
- 这就是为什么您应该在.NET中使用接口进行API设计,因为所有接口成员必须是{{1 }}。在实现类时,对于不属于接口的任何成员,请使用上述经验法则 - 除非它们构成接口的逻辑部分,否则就消费者而言。
因此,如果您今天使用public
方法,则应该使用具有相同辅助功能的补充Read
方法。这是一个很好的设计(对称和预期),但是如果公共方法使用它们,那么你读或写的应隐藏在私有方法之后。
答案 1 :(得分:1)
根据名称描述的方法的性质,使用公共和私有。
当方法可以暴露给其他对象时 public
private
当其他对象不应该访问该方法时。
如果您的对象需要更安全,请使用private
访问说明符。您还应该了解protected
访问说明符,其区别在于,这些方法只能由继承它们的对象访问。
答案 2 :(得分:1)
如果某个类有某些东西暴露给外界,那么将其公开为私有。它取决于课程的功能和目的,而不是当前或未来的要求。
答案 3 :(得分:1)
这是一个判断电话。一般来说,如果它在逻辑上是类所呈现的接口的一部分以获得它提供的功能,即使它没有当前用户,它也应该是公共的。这样可以减少每次想要使用它时需要修改类的机会,就像你已经使用它一样。
然而,这需要付出代价。您公开的每个功能都是您承诺提供的功能。如果您将来决定将其从公共界面中删除,则可能会破坏呼叫者。
例如,考虑一个地图类。假设您目前没有任何需要知道地图中项目数量的呼叫者,并且您当前的实施具有可以轻松返回的size
变量。您可以添加一个返回地图大小的getSize
函数。它在逻辑上是map类公开的函数的一部分。因此,即使当前的呼叫者不需要知道大小,也可以认为它应该是公开的。
但是,未来的实现完全有可能希望摆脱size
变量。也许增加和减小大小的开销很大,并且实现被改变为不需要知道大小。如果你公开了getSize
函数并且它被调用了,那么你要么必须继续跟踪大小,即使你不需要它,要么使函数非常昂贵,必须实际计算大小。
如果表格为空,并且您为此目的提供了isEmpty
函数,则需要知道很多代码。经验表明,如果您还提供了getCount
功能,则人们会getCount() == 0
而不是isEmpty
。这可能在今天没有任何区别,但它可能会限制您未来的实施选择,以使getCount
与isEmpty
一样便宜。
如果可能的话,我强烈建议将其公之于众,如果您可以轻松想象该类的非破坏用户可以从访问该功能中受益,并且它构成了该类提供的功能的逻辑部分。否则,您无论如何都可以轻松添加它。所以不要过分强调它。这主要是一种风格问题,并试图预测未来。
答案 4 :(得分:0)
面向对象开发的基本原则;一个类的实例应该只暴露它的客户端需要访问的内容。请参阅link并搜索“封装”。