C# singleton pattern in a static class?
我的事件调度员类低价夫妻个案的其他类别实施信号槽设计模式。
只有一个事件调度器被认为存在于一个应用中。自从我开始工作的那一类——从
为了克服这一局限性,我以私人财产
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | namespace EventDispatcher { public static class EVD { static Dispatcher evd { get { return Singleton<Dispatcher>.Instance; } } public static void Subscribe(string name, EvtHandler handler) { evd.Subscribe(name, handler); } public static void UnSubscribe(string name, EvtHandler handler = null) { evd.UnSubscribe(name, handler); } public static void Dispatch(string name, object sender, EvtArgs e = null) { evd.Dispatch(name, sender, e); } } class Dispatcher : Dictionary<string, Event> { /* main event dispatcher */ } static class Singleton<T> where T : /* generic singleton creation */ } |
所以这是我的问题
这真的让人有理由在一个静态类中创建一个单一的实例吗?阿法克一个固定班是独一无二的。因此,这可能是最好的做法,而不是创建单曲和宣告
ZZU1
Lazy Intantiation and Thread Safety in this case?最起码通用的Singleton等级使用
或者我应该更好地宣布财产如此:
1 2 3 4 5 |
我害怕我无法完全理解所有的懒惰的安装和威胁
谢谢你的帮助
不,因为您不能创建静态类的实例,所以字段只有一个副本,所以不需要使用单例模式。
将构造放在静态构造函数中,该构造函数保证只调用一次,因此自动线程安全:https://msdn.microsoft.com/en-us/library/k9x6w0hc.aspx
额外参考:它看起来与"Employee Type Object"中的"Static Field"相对应:http://www.rvenables.com/linkjackandsureaccidentaldroptable/clr_via_csharp_f4.9.png