为什么不使用Public成员函数

本文关键字:成员 函数 Public 为什么不 | 更新日期: 2023-09-27 18:08:58

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

例如,如果我的类是Math,具有公共函数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
}

为什么不使用Public成员函数

方法(和类型)越公开,暴露给它们的代码就越多。这增加了其他代码(甚至是在你公司控制下的代码)启动的机会,这取决于当前的工作方式。这限制了以后更改实现的灵活性。

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

通过隐藏你不知道对客户有用的一切,你为自己买了很多灵活性。在你的公共API中投入大量的思考是非常重要的,因为这在以后真的很难改变——但是如果你把很多实现保持在内部,你可以重构你的核心内容,使它更优雅、更灵活,或者更快……所有这些都不会破坏任何代码,这取决于你的库。

显然一些的东西需要被公开——至少在类库中——但是你应该小心你公开了多少,除非你很乐意以后中断所有的调用者(或者永远接受你所做的每一个决定)。

使用公共成员函数没有任何问题——它们是非常重要的,尽管在您的例子中,对象的必要性是非常可疑的。然而,当你需要重用一些不应该成为公共接口一部分的代码时,保护/私有函数才适用。

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