/*
* 逻辑类继承使用
* 线程安全, double-lock
*/
public class Singleton<T> where T : class, new()
{
protected Singleton() {}
// C#的析构函数既没有修饰符,也没有参数。
~Singleton() { m_inst = null; }
private static T m_inst = null;
// 定义一个标识确保线程同步
private static readonly object locker = new object();
static public T Instance
{
get
{
if (null == m_inst)
{
lock (locker)
{
if (null == m_inst)
{
m_inst = new T();
}
}
}
return m_inst;
}
}
/// <summary>
/// 主动释放
/// </summary>
public void Purge()
{
m_inst = null;
}
}
使用时,继承该单例基类,即可创建自己的单例类。
用.instance可拿到单例对象。