泛型約束new()的使用


  下面泛型約束代碼,where字句后面有new()約束,T類型必須有公有的無參的構造函數。

private T InternalCreate<T>()
        where T : IObjectWithGuid, new()
        {
            T result = new T();  //不同於非泛型中的new
            result.Guid = Guid.NewGuid().ToString();
            return result;
        }

使用new關鍵字的作用只是讓編譯器在泛型實例化之處,檢查所綁定的泛型參數T是否具有公共無參構造函數(public 無參構造函數),例如:InternalCreate<SomeType>(); //此處編譯器會檢查SomeType是否具有無參構造函數。若沒有則會有compile error。

上面的代碼等同於下面代碼:

private T InternalCreate<T>()
        where T : IObjectWithGuid, new()
        {
            T result = System.Activator.CreateInstance<T>(); 
            result.Guid = Guid.NewGuid().ToString();
            return result;
        }

 


免責聲明!

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



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