如何确定方法是私有的,受保护的,内部的还是公共的?

Jad*_*ias 5 .net c# oop

我正在设计一个类,如果某些方法暴露为公共方法,它们不会造成任何伤害.但它们也可以是私有的,因为它们只能在我的项目中使用同一个类.

公开它们具有以下优点:

  1. 单元可测试,无需访问器.
  2. 灵活性.

将它们设为私有具有以下优点:

  1. 公共文档简化.
  2. 一些未知的错误没有暴露.

在这种情况下,哪些是一般指导原则?

Joh*_*ers 13

始终尽可能保持私密.

对于单元测试,我有时会将成员设置为内部,然后使用InternalsVisibleToAssemblyInfo.cs中的属性来允许单元测试程序集访问内部成员.

  • 这就是为什么我提倡(在C#中)*不*使用显式可见性修饰符.默认设置使所有内容尽可能保密,您可以随时添加修改器以使某些内容更加可见.所有私人,私人,私人只是噪音,这使得更难以看到什么是非私人的. (3认同)

Chr*_*ung 5

在这种情况下,我通常会尽可能地将它们设为私有,然后在需要时提升它们的可访问性(例如,来自其他类的代码将受益于能够直接访问这些方法).将方法添加到API很容易,并且更难以删除它们(不破坏其他代码).

  • 他所说的只是如果你开始将每个方法公之于众,你将会有更难的时间将一些方法私有化,因为其他一些类可能会使用它们.如果有人想要借20美元并且你从一开始就告诉他们没有比你给他们钱更容易的话,那么10分钟之后再要求它. (4认同)

tra*_*ode 4

哦,请阅读第 1 章。Steve McConnell 的 Code Complete 2 的 06(如果您有权访问)。这将完美回答你的问题。

一般来说,如果方法适合类的整体“角色”,请将其公开。从技术上讲,尽量不要破坏抽象。我本想举一个例子,但我不知道你的工作背景,所以例子可能无关紧要。

如果不需要,则无需公开方法。

为了进行测试,请向 John sanders +1。

但我真的无法像 Steve 在 CC2 中解释的那样在这里解释你。

我希望可以在 Satckoverflow 上发布书籍参考吗?(请给出意见。)