/// <summary> /// 两个If 进行两次安全检查 同样的做法还有Syste.DBNull,System.Reflection.Missing 设计 /// 以 公开的静态的方法返回 对象 /// </summary> /// <returns></returns> public static MySingleton GetSingleton() { Debug.WriteIf(s_value == null, " s_value is null"); if (s_value != null) return s_value; Monitor.Enter(s_lock); if (s_value == null) { //如果仍旧没有创建实例,则创建一个 MySingleton temp = new MySingleton(); //讲引用保存到s_value 中 Interlocked.Exchange(ref s_value, temp); } Monitor.Exit(s_lock); return s_value; }
/// <summary> /// 两个If 进行两次安全检查 同样的做法还有Syste.DBNull,System.Reflection.Missing 设计 /// 以 公开的静态的方法返回 对象 /// </summary> /// <returns></returns> public static MySingleton GetSingleton() { Debug.WriteIf(s_value == null, " s_value is null"); if (s_value != null) { return(s_value); } Monitor.Enter(s_lock); if (s_value == null) { //如果仍旧没有创建实例,则创建一个 MySingleton temp = new MySingleton(); //讲引用保存到s_value 中 Interlocked.Exchange(ref s_value, temp); } Monitor.Exit(s_lock); return(s_value); }