using System; public class Singleton where T : class, new() { private static T s_instance; public static T instance { get { if(Singleton.s_instance == null) { Singleton.CreateInstance(); } return Singleton.s_instance; } } protected Singleton() { } public static void CreateInstance() { if(Singleton.s_instance == null) { Singleton.s_instance = Activator.CreateInstance(); (Singleton.s_instance as Singleton).Init(); } } public static void DestroyInstance() { if(Singleton.s_instance != null) { (Singleton.s_instance as Singleton).UnInit(); Singleton.s_instance =(T)((object)null); } } public static T GetInstance() { if(Singleton.s_instance == null) { Singleton.CreateInstance(); } return Singleton.s_instance; } public static bool HasInstance() { return Singleton.s_instance != null; } public virtual void Init() { } public virtual void UnInit() { } }