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

时间:2011-02-07 23:01:03

标签: c# .net language-features

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

我有理由遏制这种直觉吗?

6 个答案:

答案 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