为什么OOP中静态类的最佳实践各不相同?我目前正在阅读有关Java最佳实践的文章,我发现根据这本书我们必须偏爱静态类而不是非静态类。我记得在C#最佳实践中,我们必须根据DennisDoomen的C#3.0、4.0和5.0编码指南避免这种情况:AV1008-避免静态类除了扩展方法容器代码之外,静态类通常会导致设计错误。它们非常困难,如果不是不可能的话,除非你愿意使用一些非常hacky的工具。注意如果您真的需要那个静态类,请将其标记为静态,以便编译器可以阻止实例成员并实例化您的类。这为您省去了创建显式私有构造函数的麻烦。我找到了这两个用于C#答案和Java答案什么时候使用和避免静态类,但只是好奇-C#和Java都是OOP语言,为什么它在最佳实践中完全不同?更新:我无法从Java书中复制那么多页面,但底线是:如果您声明一个不需要访问封闭实例的成员类,请始终将静态修饰符放在其声明中,使其成为静态成员类而不是非静态成员类。如果省略此修饰符,则每个实例都将对其封闭实例有一个不相关的引用。存储此引用会花费时间和空间,并且可能导致保留封闭实例,否则该实例将有资格进行垃圾收集(第6项)。如果你需要分配一个没有封闭实例的实例,你不能这样做,因为非静态成员类实例需要有一个封闭实例。私有静态成员类的一个常见用途是表示由其封闭类表示的对象的一个??组件。仅仅是关于性能吗?请注意,这个问题更多的是关于静态类和OOP,而不是Java和C#之间的差异。JoshuaBloch给出的建议也适用于c#,给c#的建议也适用于java(说静态类的时候)。为什么要使用静态成员?如果您习惯了VisualStudio的Resharper生产力工具,它会给出与JoshuaBloch相同的建议,在c#中它说Methodcanbestatic,这在给定的链接中是有意义的。为什么不使用静态成员?因此,如果您了解这两个建议并且它们适用于两种语言,那么这两个建议都很好。适当时使用它们,不适当时避免使用它们。以上是C#学习教程:为什么OOP中静态类的最佳实践各不相同?分享的全部内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——我觉得第二个文字片段是关于成员类和封装的,是Java的——具体功能(如何实施)。静态类或字段(如在C#中)实际上是糟糕的设计实践——看看OOP和SOLID。此外,它可能会在CLR级别导致一些性能问题。但是私有静态方法没有错。我记得,Resharper建议使私有方法独立于静态的具体实例。它增加了可读性并且没有副作用。而且您不需要对私有方法进行单元测试。这也是不好的做法。最后,一些作者简要介绍了技术和一些-关于设计原则。这些观点之间常常存在矛盾(但所描述的两个片段与此处无关)。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
