自己在做一個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公用訪問就行了!
