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

问题描述 投票:0回答:7

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

我有什么理由应该抑制这种本能吗?

c# .net language-features
7个回答
20
投票

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

对我来说,将函数式和面向对象编程结合起来已经变得越来越自然;我喜欢不执行突变的instance方法。函数式编程更容易理解,因为它不鼓励复杂的突变; OO 编程更容易理解,因为它所操作的代码和数据是紧密相连的。为什么选择?拥抱“和”的力量;两者都做!


12
投票

你可以用这种方式编写工作程序,但这不是惯用的。如果你想在团队中工作,我会尽力限制它。如果没有其他人读你的代码,那就发疯吧。


6
投票

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

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

如果 C# 的目的是纯粹的函数式,则

static
是不必要的,因为默认情况下一切都是静态的。如果您严格遵循 OOP 实践和 SOLID 原则,您的代码将有效地发挥作用(我知道某处有关于此的引用),因此您最终会获得两全其美的效果。

我在多用户项目中限制它的原因是它不是典型的 C#(它实际上是带有手铐的 C#)。你只需要一个人打破规则并声明一个静态可变属性,一切都会陷入困境。


0
投票

不完全。我确实喜欢我的扩展方法和 Linq,但是 OO 语言应该以 OO 方式使用。此外,这对于 CPU 以及其上的几个层都是必要的。


0
投票

好问题。

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

自从我现在对接口进行大量编程并将一些方法标记为“受保护的虚拟”而不是“静态”(例如单元测试的提取和覆盖模式)以来,我的代码看到的静态情况越来越少。但这并不是说您不能仅从这些方法中调用静态方法。


0
投票


-2
投票

对象状态和行为;

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

我认为仅这个理由就足以遏制静态修饰符。

出于明确的原因,我们应该听利斯科夫夫人的话。

这里

© www.soinside.com 2019 - 2024. All rights reserved.