制作单身System.Timers.Timer
的{{1}}成员是否有意义?
如果我在单例实例上下文中设置volatile static
_fooTimer
和/ static
会有什么不同吗?
如果我不制作volatile
_instance
会不会有什么不同?
EDIT2:我更正了codeample并使其成为更好的Singleton而没有不必要的静态或易失性字段并更改为Interlock.Increment
static
答案 0 :(得分:9)
单例类中的 only 静态变量通常是对单个实例的引用。然后,您可以将实例变量用于该类型的剩余状态。如果你把它设置为静态,那么你甚至不需要创建一个单个类的实例来使用计时器 - 但我会期望你想做什么所以无论如何。
我对使用volatile
感到紧张......这几乎肯定并不意味着你认为它意味着什么。我可能会使用Interlocked
来实现变量的原子更新。
(请注意,根据my article on the topic,有很多更好的方法可以实现它。)
编辑:现在代码已经更改为显示更多成员,这有点令人困惑。有一个静态方法可以使用_counter
(一个实例变量) - 可能是通过单例实例。基本上,这个类似乎没有决定它是想成为一堆静态方法还是单例实例。我建议你决定以某种方式使所有可以访问,但不能混合使用。
答案 1 :(得分:1)
通过使整个类保持静态,您可以在创建实例期间将任何线程同步问题推送到CLR:
public static class Foo
{
private static Timer _fooTimer;
static Foo()
{
_fooTimer = new Timer();
}
}