关于单例的泛型实现,悲哀啊
自己在做一个Unity的小项目,想在UI上不使用脚本继承MonoBehavior然后挂在物体上的方式。于是想写一个单例的UIBase类,子类继承UIBase同时也复用UIBase的单例,这样不用每写一个子类就写一遍单例。于是在网上找到不少人写的单例的泛型实现:
//父类 public class Person<T> where T : class, new() { private static T _instance; private static readonly object syslock = new object(); public static T GetInstance() { if (_instance==null) { lock (syslock) { _instance = new T(); } } return _instance; } } //子类 public class Student : Person<Student> { } //或者: public class Student { public static Student GetInstance() { return Person<Student>.GetInstance(); } } //调用 Student.GetInstance();
这种写法子类无法私有化构造方法,因为子类作为泛型T必须具有公用的无参构造,完全违背了单例。单例最核心的东西都没理解到,只想着实现GetInstance公用访问就行了!