何时使用静态变量?

时间:2009-06-02 23:03:17

标签: c# global-variables

我目前正在使用大量渲染在C#中进行一个项目,并且在几乎所有类中都有一个用于缩放渲染的类型整数的常量值。我知道我可以在一个地方将这个常量定义为一个普通变量然后传递它,但这看起来真的很麻烦。何时可以在C#中使用静态变量?对我的问题最简单的解决方案是创建一个包含所有其他类可以引用的静态变量的类 - 这会是不好的设计吗?

5 个答案:

答案 0 :(得分:8)

常数是多少? static适用于readonly的内容,但如果不是 readonly,您很快就会陷入混乱 - 特别是如果您有多个主题。对我来说缩放因子听起来并不是一个常数 - 即它不是:

public const double ScaleFactor = 1;

我会毫不犹豫地将静态变量用于我加载一次并且单独留下的东西。除此之外,我可能会使用此值和任何其他实用方法封装(在您的情况下)某种RenderContext - 并在方法之间传递RenderContext;如果你需要进行单元测试等,这也可以帮助你从底层实现中抽象出来。

当您发现需要更多属性时(并且您不可避免地会有),您只需扩展RenderContext类 - 没有其他更改。


(编辑)

另外 - 考虑未来:你会不会一次做多个渲染?因为我们现在都有很多核心,等等......如果所有线程共享一个值,静态就好了。有[ThreadStatic],但相比之下有点混乱。

答案 1 :(得分:7)

完全不错的设计。实际上,使用公共或实用程序命名空间和公开静态方法和静态值的类将这些值集中在一个位置,以便您可以确保应用程序中的每个模块都使用适当的值。它的凝聚力低,但可以接受。我觉得没问题。

答案 2 :(得分:6)

不,这实际上是静态变量的完美候选者。您甚至可以更进一步,使类静态,以便无法实例化。然后,您可以将所有常量添加到该类以及必要时的一些辅助方法。

答案 3 :(得分:2)

答案是,如果程序有效且可维护,那就去做吧。

静态变量不是罪,只知道何时使用它们。 :)

答案 4 :(得分:1)

如果你的所有课程都必须理解这个值+做其他事情,那么(除非它像pi一样)你可能应该检查你的课程是否只有一个问题。也许“价值”需要成为一个对象,可以完成整个代码库中目前正在进行的操作?