所以是的,这个问题基本上都说明了一切.当您确保私人成员/方法/任何标记为私有(或受保护,公共或内部等)时,您会获得什么?
我的意思是,当然我可以把我的所有方法都标记为公开,一切都应该可以正常工作.当然,如果我们谈论良好的编程实践(顺便说一句,我是一个坚实的倡导者),我会将一个方法标记为私有,如果它应该被标记为这样,没有问题.
但是,让我们留出良好的编程实践,并从实际的数量增益来看待这一点.对于我的方法,成员,班级等的适当范围,我能得到什么?
我认为这通常会转化为性能提升,但如果有人可以提供更多细节,我会很感激.
(出于这个问题的目的,我在C#.NET上思考的更多,但是,你可以随意提供你认为合适的语言/框架的答案.)
编辑:大多数人指出,这不会导致性能提升,是的,回想起来,我甚至不知道为什么我这么想.可能缺少咖啡.
在任何情况下,任何优秀的程序员都应该知道适当的范围(1)如何帮助您的代码维护/(2)控制库/ app/package的正确使用; 我有点好奇是否有任何其他好处,你从中得到的那些显然不是很明显.根据下面的答案,它看起来基本上总结为最重要的两件事.
性能与方法的可见性完全无关.虚方法有一些开销,但这不是我们范围的原因.它与代码的维护有关.您的公共方法是您的类或库的API.作为一名班级设计师,您希望为外界提供一些保证,即未来的变化不会破坏其他人的代码.通过将某些方法标记为私有,您将剥夺用户依赖某些实现的能力,这允许您自由地随意更改该实现.
即使是没有可见性修饰符的语言(如python)也有将标记方法标记为内部且可以更改的约定.通过在方法前加上_underscore()作为前缀,您向外界发出信号,如果您使用该方法,您需要自担风险,因为它可以随时更改.
另一方面,公共方法是显式进入代码的方式.应尽一切努力使公共方法向后兼容,以避免我上面描述的陷阱.
通过更好的封装,您可以提供更好的API.只有您班级用户感兴趣的方法/属性可用:可见.接下来,确保不能调用/修改某些不应调用/修改的变量.
这是最重要的事情.为什么你认为这会带来性能提升?
我认为你从正确的范围中获得了两个重要的特征.您的API规模缩小,并且明确专注于手头的任务.
其次,您可以轻松实现,因为您可以自由更改实现细节而无需更改公开的API.
我无法看到辅助功能修饰符如何以任何方式影响性能.