即使我将类成员函数公开并且被它消耗了 其他客户端应用程序,实现细节 函数永远不会暴露给客户端。为什么要使成员函数受到保护或私有?
例如,如果我的类是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
}
答案 0 :(得分:8)
您的方法(和类型)越公开,它们接触的代码就越多。这增加了其他代码(即使是公司控制下的代码)依赖依赖开始工作的机会......这会限制以后更改实现的灵活性。
举一个具体的例子,我正在开发一个名为Noda Time的开源项目。现在我们还没有第一次公开发布,但我最近对各种内部类型进行了大量更改 - 包括相当大地更改类型层次结构,甚至删除方法。如果那些是公共类型或公共方法(如果我们已经进入v1.0)那么我们可能会破坏依赖于特定实现的代码。
通过隐藏您不知道的所有内容对客户有用,您可以为自己带来很大的灵活性。在你的公共API中加入大量的思考是非常重要的,因为以后真的很难改变 - 但是如果你在内部保留了很多你的实现,那么你可以重构内心的内容。使它更优雅,更灵活,或者更快......根据您的库,不会破坏任何代码。
显然某些事情需要暴露 - 至少在类库中 - 但是你应该小心你暴露了多少,除非你很乐意以后打破所有来电者(或者与之共处)你做出的每一个决定,永远。)
答案 1 :(得分:2)
公共成员职能没有任何问题 - 他们是非常必要的,尽管你案件中某个对象的必要性有点可疑。但是,受保护/私有函数适用于需要重新使用某些不属于公共接口的代码时。
答案 2 :(得分:2)
因为某些方法可能是内部实现的一部分,而不是公共接口的一部分。例如,某些私有方法可以将对象状态更改为无效对象,但它仅用作其他一些公共方法的中间步骤。定义您不希望客户端调用它。