C# 泛型单例模式

c#的泛型单例

public class Single1<T> where T : class
{
    private static T instance;
    private static readonly object _syncLock = new object();

    public static T Instance
    {
        get
        {
            if (instance == null)
            {
                //加锁
                lock (_syncLock)
                {
                    if (instance == null)
                    {
                        //获取T类的类型信息
                        Type t = Type.GetType(typeof(T).FullName);
                        //Activator.CreateInstance()  创建类,获取类的实例
                        instance = Activator.CreateInstance(t, true) as T;
                    }
                    return instance;
                }
            }
        }
    }
}

这里为什么用Type去创建这个类而不用new();

是为了防止这个类在另一个人不知道这是个单例类的情况去new()这个类

用法:


public class MyClass : Single<MyClass>
{
    public int num;
    /// <summary>
    // 私有构造函数防止多次创建这个类
    /// </summary>
    private MyClass()
    {
    }

}

public class ClassA
{
    public void Func()
    {
        //调用单例里的属性
        MyClass.Instance.num = 10;
    }
}

这就是个完整的泛型单例模式

可以防止单例在外部被实例化

猜你喜欢

转载自blog.csdn.net/qq_42657893/article/details/88945993