Double-Checked Locking
public class Singleton { private volatile static Singleton _instance = null; private static readonly object _locker = new object(); private Singleton() { } public static Singleton GetInstance() { if (_instance == null) { lock (_locker) { if (_instance == null) _instance = new Singleton(); } } return _instance; } }
静态初始化
public sealed class Singleton { private static readonly Singleton _instance = new Singleton(); // 显示静态构造函数,告诉C#编译器不要将Type标记beforefieldinit(这样就能够使程序在类的字段被引用时才会实例化) static Singleton() { } // 防止创建该类的默认实例 private Singleton() { } public static Singleton Instance { get { return _instance; } } }
延迟初始化
public sealed class Singleton { private Singleton() { } public static Singleton Instance { get { return nested._instance; } } private class nested { static nested() { } internal static readonly Singleton _instance = new Singleton(); } }
.Net 4‘s Lazy<T> type
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。