【问题标题】:Why Not Use Public Member Functions为什么不使用公共成员函数
【发布时间】:2011-11-20 11:37:55
【问题描述】:

即使我公开了类成员函数并且它被 其他客户端应用程序的实现细节 功能永远不会暴露给客户。为什么要使成员函数受保护或私有?

例如,如果我的课程是数学,使用公共函数 sum(int, int b),那么只有接口/声明部分会暴露给客户端,而不是实现。

public class Math
{
      public int sum(int, int b)
      {
               //Implementation
      }
}


public class Client
{
         Math objMath = new Math();
         objMath.Sum(4,10);//It will not display implementation inside sum than why to avoid
}

【问题讨论】:

  • 不好的例子。 Math 可以/应该是static
  • 除了这里的优秀答案,在维基百科和其他地方查找松散耦合。这是 OO 的主要好处之一。
  • @Henk 那么我该如何扩展它以提供更快的添加410 的实现? :)

标签: c# class public


【解决方案1】:

您的方法(和类型)越公开,它们暴露的代码就越多。这增加了其他代码(甚至是您公司控制下的代码)将开始依赖该代码以当前方式工作的机会......这限制了以后更改实现的灵活性。

举一个具体的例子,我正在开发一个名为Noda Time 的开源项目。现在诚然,我们还没有发布我们的第一个公开版本,但我最近对各种内部类型进行了大量更改 - 包括相当显着地更改类型层次结构,甚至删除方法。如果这些是公共类型或公共方法(如果我们已经使用 v1.0),那么我们可能会破坏依赖于特定实现的代码。

通过隐藏您不知道对客户有用的所有内容,您为自己购买了很大的灵活性。对公共 API 进行大量思考非常重要,因为以后很难更改 - 但是如果您将很多 实现 保留在内部,则可以根据自己的意愿重构为让它更优雅、更灵活,或者可能更快......所有这些都不会破坏任何代码,具体取决于您的库。

显然一些东西需要被暴露——至少在类库中——但是你应该小心你暴露了多少,除非你很高兴以后会破坏所有调用者(或者忍受你做出的每一个决定,永远)。

【讨论】:

    【解决方案2】:

    公共成员函数没有任何问题-它们非常重要,尽管在您的情况下对象的必要性有点可疑。但是,受保护/私有函数适用于您需要重用某些不应成为公共接口一部分的代码时。

    【讨论】:

      【解决方案3】:

      因为某些方法可能是内部实现的一部分,而不是公共接口的一部分。例如,某些私有方法可以将对象的状态更改为无效状态,但它仅在某些其他公共方法中用作中间步骤。绝对不希望它被客户端调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-22
        • 1970-01-01
        • 1970-01-01
        • 2021-10-06
        • 1970-01-01
        • 2017-03-01
        相关资源
        最近更新 更多