最近在學歷基類的寫法時,遇到了一個問題:如何怎麼建立一個泛型類T的實例呢? 函數
廢話很少說了,直接上代碼吧,目前發現三種方法,先貼上,之後再總結,但願能幫助跟我遇到一樣問題的朋友。測試
方法一,經過外部方法傳入的實例來實例化:this
//泛型類: public class MySQLHelp<T> { private T t; public MySQLHelp(T t) { this.t = t; } } //測試類 public class Test{ public static void Main(){ MySQLHelp<Message> mm = new MySQLHelp<Message>(new Message()); } } //其餘類 public class Message{ }
方法二,經過限制泛型類的構造函數:spa
限制泛型類必須帶有無參構造方法:public class MySQLHelp<T> where T:new()翻譯
//泛型類: public class MySQLHelp<T> where T:new() { private T t=new T(); public MySQLHelp() { } } //測試類 public class Test{ public static void Main(){ MySQLHelp<Message> mm = new MySQLHelp<Message>(); } } //其餘類 public class Message{ }
方法三,利用微軟提供的方法:code
利用微軟的類:System.Activator(包含建立本地或遠程對象類型的方法或獲取引用的方法,翻譯名:活化劑類)對象
建立指定泛型類型參數指定的類型的實例:System.Activator.CreateInstance<T>()
//泛型類: public class MySQLHelp<T> { //建立指定泛型類型參數指定的類型的實例(使用這種方法能夠不對泛型類型T作限制,即不用添加:where T:new()) private T t = System.Activator.CreateInstance<T>(); public MySQLHelp() { } } //測試類 public class Test{ public static void Main(){ MySQLHelp<Message> mm = new MySQLHelp<Message>(); } } //其餘類 public class Message{ }