我应该更喜欢C#中的静态方法吗?

花了一些时间学习函数式编程,我想要使用不执行任何变异的静态方法变得越来越自然。

有什么理由可以抑制这种本能吗?

我发现这个问题有点奇怪,因为不执行突变的静态方法和方法是两种正交的方法分类。 您可以使用变异静态方法和非突变实例方法。

对我来说,结合function和oo编程变得越来越自然; 我喜欢不执行突变的实例方法。 函数式编程更容易理解,因为它阻止了复杂的突变; OO编程更容易理解,因为它运行的代码和数据非常接近。 为什么选择? 拥抱“和”的力量; 两个都做!

你可以用这种方式编写工作程序,但这不是惯用语。 如果你想在团队中工作,我会试着遏制它。 如果没有其他人在阅读您的代码,请坚持下去。

出于某种原因,当我读到你的问题时,我会想到这句话:

你可以用任何语言编写Fortran。

如果C#的意图纯粹是function性的,那么static将是不必要的,因为默认情况下一切都是静态的。 如果你严格遵守OOP实践和SOLID原则,那么你的代码就会有效地发挥作用(我知道这里有一个关于这个问题的引用)所以你最终会得到两全其美的结果。

我在多用户项目中遏制它的原因是它不是典型的C#(它真的是带有手铐的C#)。 你只需要一个人来打破规则并声明一个静态的可变属性,一切都会变成地狱。

不完全的。 我喜欢我的扩展方法和Linq,但OO语言应该以OO方式使用。 此外,它在CPU上都是必不可少的,而且最重要的是几层。

好问题。

我认为答案取决于你的代码所做的上下文,以及它有多少是静态的。

我的代码看到的静态情况较少,因为我现在编程接口很多并且标记了一些方法’protected virtual’而不是’static’用于unit testing的提取和覆盖模式等情况。 多数民众赞成不是说你不能这些方法中调用静态方法。

当你编写OOP时,有很多理由应该遏制这种本能。

对象状态和行为;

静态类和方法需要参数,您应该确定哪些参数将传递给静态方法。 但是如果相关的方法是状态,则类管理自己。

我认为只有这个理由足以抑制静态修饰符。

出于明确的原因,我们应该听Liskov夫人。 这里