【问题标题】:Static class vs instanced class [duplicate]静态类与实例类[重复]
【发布时间】:2010-10-25 09:11:48
【问题描述】:

复制

Should C# methods that can be static be static?


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

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

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

谢谢!

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

【问题讨论】:

  • 我认为这取决于您使用的语言。
  • 我不同意重复。一个是关于方法的,这个是关于类的。适用不同的问题。
  • @Mehrdad:仔细看看。这也有效地与方法有关。适用于这两个问题的建议是相同的。

标签: c# static state instance


【解决方案1】:

是的。我能想到一些原因:

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

【讨论】:

  • 4.覆盖实现。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果您打算(或认为您可能打算)从该类继承并使用 确实的代码覆盖这些方法,则将不更改状态的方法保留为非静态可能会有好处> 改变状态。虽然在那种情况下它确实应该是一个抽象类。

    【讨论】:

    • 如果您需要实例化对象,显然没有必要将类抽象化。
    • 您仍然需要使用实例类型/方法来继承,即使派生类型无意维护状态,因为您不能从静态类继承或覆盖静态方法。
    • 同意。尽管至少从哲学上讲,没有理由实例化一个没有状态的对象。
    【解决方案4】:

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

    是的,我知道这并不能回答你的问题,但我认为其他人已经很好地涵盖了这一点,我想从另一个角度了解。

    【讨论】:

      猜你喜欢
      • 2013-08-19
      • 2011-02-23
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      相关资源
      最近更新 更多