關於單例的泛型實現,悲哀啊


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM