花了一些时间学习函数式编程,我想要使用不执行任何变异的静态方法变得越来越自然。
我有理由遏制这种直觉吗?
答案 0 :(得分:20)
我发现这个问题有点奇怪,因为不执行突变的静态方法和方法是两种正交的方法分类。您可以使用变异静态方法和非突变实例方法。
对我来说,结合功能和oo编程已经变得越来越自然;我喜欢不执行任何突变的实例方法。函数式编程更容易理解,因为它阻止了复杂的突变; OO编程更容易理解,因为它所操作的代码和数据非常接近。为什么选择?拥抱“和”的力量;做两件事!
答案 1 :(得分:12)
你可以用这种方式编写工作程序,但这不是惯用的。如果你想在团队中工作,我会尝试遏制它。如果没有其他人正在阅读您的代码,请坚持下去。
答案 2 :(得分:6)
出于某种原因,当我读到你的问题时,我会想到这句话:
您可以用任何语言编写Fortran。
如果C#的意图纯粹是功能性的,static
将是不必要的,因为默认情况下一切都是静态的。如果你严格遵守OOP实践和SOLID原则,那么你的代码就会有效地发挥作用(我知道那里有关于这个问题的引用)所以你最终会得到两全其美的结果。
我在多用户项目中遏制它的原因是它不是典型的C#(它真的是带有手铐的C#)。你只需要一个人来破坏规则并声明一个静态的可变属性,一切都会变成地狱。
答案 3 :(得分:0)
不完全。我喜欢我的扩展方法和Linq,但OO语言应该以OO方式使用。此外,它在CPU上都是必不可少的,而且还有几层。
答案 4 :(得分:0)
很棒的问题。
我认为答案取决于你的代码所做的事情的背景,以及它有多少是静态的。
我的代码看到的静态情况较少,因为我现在编程接口很多并且标记了一些方法'protected virtual'而不是'static'用于单元测试的提取和覆盖模式等情况。多数民众赞成不是说你不能从中调用静态方法。
答案 5 :(得分:-2)
当你写OOP时,有很多理由应该遏制这种本能。
对象状态和行为;
静态类和方法需要参数,您应该确定哪些参数将传递给静态方法。但是如果相关的方法是状态,那么类会管理自己。
我认为只有这个理由足以抑制静态修饰符。
出于明确的原因,我们应该听Liskov夫人。 here