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