泛型動態實例化需要三個步驟:1.獲得泛型類型,2.指定泛型類型,3.實例化
有如下泛型類型:
namespace NS { class Buy<T> { public T Amount {get;set;} } }
則 Buy<T> 實例化步驟如下
1.獲得泛型類型 typeBuy
方式1 Type typeBuy=typeof(Buy<>); 方式2 Type typeBuy=Type.GetType("NS.Buy`1");
2.指定泛型類型,獲得最終泛型類型 ,如最終類型為 Buy<int>,則最終泛型類型 typeBuyInt
Type typeBuyInt=typeBuy.MakeGenericType(typeof(int)); //指定泛型類型
3.使用類型 typeBuyInt 進行動態實例化
方式1 Buy<int> buy=typeBuyInt.GetConstructor(new Type[] { }).Invoke(new object[] { }); 方式2 Buy<int> buy=Activator.CreateInstance(typeBuyInt);
此處實例化僅為舉例說明,實際使用也不會直接寫出 Buy<int> buy的定義。泛型動態實例化是用於針對泛型的抽象級處理的,有利於簡化架構代碼量,例如ORM架構以泛型緩存所有實體類映射,如果所有實體類型創建在指定命名空間,則ORM架構即可僅通過命名空間就建立出所有實體類的泛型映射。