单例模式

3.种比较好的方式:

1.

双重判断避免不必要的加锁
 class Class1
    {
        private static Class1 instance;
        private static readonly object objlock = new object();
        public Class1 Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (objlock)
                    {
                        if (instance == null)
                        {
                            instance = new Class1();

                        }
                    }
                }

                return instance;
            }

        }
    }

  2.利用静态构造函数

  public sealed class Singleton4
    {
      
        private Singleton4(){}
        public static Singleton4 Instance
        {
            get
            {
                return Nested.instance;
            }
        }

        // 使用内部类+静态构造函数实现延迟初始化
        class Nested
        {
            static Nested() 
            {
                instance = new Singleton4();
            }

            internal static readonly Singleton4 instance;
        }

    }

  3.利用反射写一个单例模板

using System.Reflection;

/// <summary>
/// 单件模式模版类
/// </summary>
/// <typeparam name="T">具体的单件类.</typeparam>
public static class Singleton<T> where T : class
{
	/// <summary>
	/// 单件实例化.
	/// </summary>
	public static readonly T Instance;

	/// <summary>
	///             防止类型的实例.
	/// </summary>
	static Singleton()
	{
		Instance = (typeof(T).InvokeMember(typeof(T).Name, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.CreateInstance, null, null, null) as T);
	}
}

  

posted @ 2019-09-09 13:35  _MrZhu  阅读(112)  评论(0)    收藏  举报