静态类vs实例类

时间:2009-05-11 19:39:33

标签: c# static state instance

复制

  

Should C# methods that can be static be static?


如果这个问题看起来很简单,请原谅我 - 我正在查看一些看起来很不错的源代码,但它提出了一些问题......

如果给定的类没有成员数据 - 即它没有维护任何类型的状态,那么将该类标记为静态方法的静态类是否有任何好处?

不标记不保持静态状态的方法有什么好处吗?

谢谢!

编辑:由于有人提出来,我正在看的代码是用c#编写的。

4 个答案:

答案 0 :(得分:8)

是。我可以想到一些原因:

  1. 易于模拟和单元测试
  2. 易于添加状态
  3. 你可以传递它(作为interface或其他东西)

答案 1 :(得分:2)

我想说使它们成为类的静态方法是有好处的,并且最重要的是使类抽象化。这样,程序员很清楚这个类从来没有打算实例化,方法仍然可用。

答案 2 :(得分:2)

如果您打算(或者认为您可能打算)继承该类并使用所做的代码改变状态。虽然在那种情况下它确实应该是一个抽象类。

答案 3 :(得分:2)

如果一个类没有维护任何状态,没有任何实例方法,并且可以完全用类方法实现,我通常会仔细研究它的行为是否实际上在其他地方更有意义。我发现它们通常似乎有很多方法doSomethingWithItem(Item item),这在Item中作为实例方法更有意义。

是的,我知道这不能回答你的问题,但我认为其他人已经很好地解决了这个问题,我想在那里得到另一个观点。