0

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

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

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

4

4 回答 4

4

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

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

静态方法对于扩展方法是必不可少的。

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

于 2013-06-17T17:09:19.773 回答
0

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

其次,这取决于您所说的“单例”是什么意思,因为任何静态字段就程序范围而言都是单例。

第三,一些例子包括:

  • 静态方法(助手、工厂方法等)
  • 常数
  • 声明“单例是反模式”的例外情况,例如线程池,通常应该与程序范围耦合
于 2013-06-17T17:10:55.043 回答
0

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

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

  • 当您需要在所有实例之间共享代码时,例如某个算法的公共实现细节,您使用static方法或扩展方法,这也必须是static.
  • 二元运算符是用static修饰符定义的,因为它们不会隐式地获取实例。
  • 需要声明线程局部static变量。
于 2013-06-17T17:14:49.873 回答
0

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

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

单例与静态无关恕我直言,只是几乎所有单例实现都使用共享变量(通常是静态的)。

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

于 2013-06-17T17:14:59.870 回答