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;
}
}
这就是个完整的泛型单例模式
可以防止单例在外部被实例化