除了实现Singleton之外,静态变量还有其他好处吗?

时间:2013-06-17 17:06:26

标签: c# clr

我想知道,在声明变量或方法静态方面有什么好处吗?

如果经常使用这些静态方法/变量并且总是在内存中加载,那么应用程序的性能可能会增加?这同样适用于变量。

那么,除了实现单例或保持全局计数器之外,变量/方法是否还有其他用途被声明为静态?

4 个答案:

答案 0 :(得分:4)

静态属性对数学常量很有用,例如Math.Pi

静态方法通常用作工厂方法来创建对象(不一定是单例)。

静态方法对于扩展方法至关重要。

私有静态方法也经常用于实现。

答案 1 :(得分:0)

首先,单身被广泛认为是一种反模式,因为它按定义打破了封装,因为一个对象必须知道它是全局唯一的。所以你的问题已经被打破了。

其次,它取决于“singleton”的含义,因为任何静态字段都是相对于程序范围的单例。

第三,一些例子包括:

  • 静态方法(助手,工厂方法等)
  • 常数
  • 语句“单例是一种反模式”的例外,如线程池,通常应该与程序范围耦合

答案 2 :(得分:0)

通常,static用于在类的所有实例(以及可选的子类)之间共享内容。它不必是一个状态,如“单例”或“共享计数器”示例。它也不需要是“全球的”。事实上,共享状态不如共享代码有用,有时被视为“代码味道”。

另一方面,共享代码逻辑被认为是好的,因为它可以帮助您增加代码重用。

  • 当您需要在所有实例之间共享代码(例如,某些算法的常见实现细节)时,您使用static方法或扩展方法,该方法也必须是static
  • 二进制运算符使用static修饰符定义,因为它们不会隐式采用实例。
  • Thread-local个变量需要声明为static

答案 3 :(得分:0)

我认为静态是支持程序结构的,因为一切都没有整齐地插入到OO中。

静态方法是纯函数。 静态变量通常用于共享:常量,计数器/寄存器。

Singletons与静态imho无关,只是几乎任何单例实现都与共享变量(通常是静态的)一起工作。

我可以使用面向过程(静态)的内部构建大量其他OO构造/模式。