利用反射動態建立 C# 泛型物件
在 C# 開發中,經常需要動態建立泛型類別的實例。這可以透過反射來實現。一個常見的應用場景是:泛型類別的類型在運行前未知,需要根據表示其完全限定名的字串來建立。
使用反射動態建立泛型類,需要使用 Activator.CreateInstance
方法:
<code class="language-csharp">using System; using System.Reflection; public class MainClass { public static void Main(string[] args) { // 获取泛型类型定义 Type genericType = typeof(Task<>); // 构建泛型类型的类型参数 Type[] typeArgs = { typeof(Item) }; // 创建具体的泛型类型 Type specificType = genericType.MakeGenericType(typeArgs); // 创建具体类型的实例 object instance = Activator.CreateInstance(specificType); } } public class Item { } public class Task<T> { } public class TaskA<T> : Task<T> { } public class TaskB<T> : Task<T> { }</code>
以上範例程式碼動態建構了 Task<Item>
的實例。如果目標類型在運行時未知,可以透過傳遞類型的完全限定名(字串)來動態建構:
<code class="language-csharp">// 使用字符串表示获取类型 Type specificType = Type.GetType("namespace.TaskA`1"); // 注意 `1` 表示泛型参数个数 // 传递类型参数并创建实例 Type[] typeArgs = { typeof(Item) }; object instance = Activator.CreateInstance(specificType.MakeGenericType(typeArgs));</code>
這種方法允許開發者在編譯時不知道特定類型的情況下,動態建立泛型類別的實例。這在從設定檔推斷類型或資料驅動程式設計等場景中特別有用。
以上是如何使用反射動態建立通用 C# 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!