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

时间:2009-04-25 16:58:22

标签: c# .net oop

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

公开它们有以下优点:

  1. 单元可测试,无需访问器。
  2. 灵活性。
  3. 将它们设为私有具有以下优点:

    1. 简化公共文档。
    2. 某些未知错误未暴露。
    3. 这种情况下的一般指导原则是什么?

8 个答案:

答案 0 :(得分:13)

始终尽可能保密。

对于单元测试,我有时会创建一个成员 internal ,然后使用AssemblyInfo.cs中的InternalsVisibleTo属性来允许单元测试程序集访问内部成员。

答案 1 :(得分:5)

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

答案 2 :(得分:4)

我非常喜欢公开您明确要公开的内容。我喜欢我班上给我的温暖安全的茧。

答案 3 :(得分:4)

哦,请阅读Ch。 06史蒂夫麦康奈尔的代码完成2,如果你有权访问它。这将完美地回答你的问题。

一般情况下,如果方法适合班级的整体“角色”,请将其公之于众。从技术上讲,尽量不要打破抽象。我会举个例子,但我不知道你工作的背景,所以这些例子可能无关紧要。

如果您不需要它,则无需公开Method。

进行测试时,+1给John打磨机。

但我真的无法在这里解释,正如史蒂夫在CC2中所解释的那样。

我希望可以在Satckoverflow上发布书籍参考吗? (请评论。)

答案 4 :(得分:3)

类型的唯一公共成员应该是类型本身的公共接口的一部分。您的目标应该是将类型的接口最小化到最少数量的成员,并且几乎不暴露任何底层实现。

答案 5 :(得分:2)

如果你发现很难彻底测试一个课程,那么课程可能会做得太多。使用组合拆分班级可以使单个单元更易于测试。

有时它是有道理的,有时则不然。只是一个想法。

答案 6 :(得分:1)

我永远不会让我的私人公开!周期。

答案 7 :(得分:1)

公开您的目标客户和使用场景所需的内容,仅此而已。我不会将单元测试视为客户端并进行更改,以便开始时不打算公开使用的代码只是为了单元测试而公开访问。如果你这样做,你会混乱你的api,降低api的可用性,并使未来的更改变得更难而且不理想,因为现在可能有客户端代码使用了应该是私有api。

我会检查你是否有更好的选择。例如,您可以在Visual Studio 2005和2008中生成私有访问器,使公共类的非公共API可公开用于测试目的。这可能会使您的单元测试代码变得混乱,但对我来说最重要的是您的设计以及您向客户(包括您和您的团队)发布的API。

另一方面,我还要提到单元测试为您提供了一个很好的机会,让您了解您的设计有多好,以及从客户角度来看您的api是多么容易。在单元测试开发过程中遇到挫折,问题等,您可以进行更改以增强您的api和设计,使其更加简单,美观和实用。

相关问题