【问题标题】:Why a class with only static methods is used?为什么使用只有静态方法的类?
【发布时间】:2015-04-05 06:05:27
【问题描述】:

我想知道创建一个只有静态方法的类的原因,例如ConsoleConvert 类。我能想到的唯一原因是将相关函数组合在一起,那么这与命名空间有何不同。

【问题讨论】:

  • 静态类基本上是实现单例的一种方式。此外,用于定义对预先存在的类的扩展。
  • 请注意,在 C# 中,每个方法、属性、事件等都必须存在于一个类型中,例如 class。不允许将方法作为命名空间的直接成员。但我明白你为什么将静态类与命名空间进行比较。
  • c# 还有一种用法:扩展方法必须在静态类中声明。例如:System.Linq.Enumerable
  • @Richard 那么静态类和单例之间到底有什么区别?单例只在调用时初始化,而静态类在启动时初始化?
  • @Kilazu:在我的答案下方的评论中查看答案。

标签: c# .net class oop


【解决方案1】:

只有一个控制台,为什么需要实例化一个类?没有必要。这只是原因之一。 (这只是实现单例设计模式的一种方式)

另一个原因可能是这些方法与实例无关,它们只是辅助方法,例如Convert.XXX。与此相关的是扩展方法,它们必须在 static 类中,因为它们与它们所在的类的实例无关。

命名空间不能包含方法,所以你需要一个类来包装它们。

【讨论】:

  • 正如我在问题的 cmets 中所问的,静态类和 Singleton 之间究竟有什么区别?
  • @Kilazur:你不能将静态类的实例传递给方法,你可以传入单例实例化类。
  • @PatrickHofman 将单例类传递给方法没有意义。
  • 我同意它通常不会。如果你必须将它传递给另一个不属于你的方法并且你想在你身边强制执行单例,它会这样做。
【解决方案2】:

这个问题的一个很好的答案是对 Stroustrup 的采访,谈论不变量。如果一个类没有修改它的任何属性,或者没有属性,你可能需要静态方法。

http://slesinsky.org/brian/code/stroustrup_on_invariants.html

【讨论】:

  • 这个说法很有趣。
【解决方案3】:

你已经明白了。当您看到我们在非常大的项目集群中使用此类类时,也许会变得很清楚:

我们使用这样的类,例如作为我们项目集群中的UtilitiesConstants 功能。

这意味着您可以随时使用ConvertXFromYtoZWriteDebug 等实用程序,而无需处理对象的实例。

我们还使用“很多”不同的常量。将它们放在一个静态位置非常好:Constants.MyArea_Type_Foo

顺便说一句,拥有static Regex.Match 类也很好。我几乎从不使用动态 Regex 类。

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 2023-03-06
    • 2011-07-11
    • 2011-12-11
    • 2013-07-21
    • 2015-11-13
    • 1970-01-01
    • 2013-08-30
    • 2011-09-16
    相关资源
    最近更新 更多