Gunakan refleksi untuk mencipta objek generik C# secara dinamik
Dalam pembangunan C#, selalunya perlu mencipta contoh kelas generik secara dinamik. Ini boleh dicapai melalui refleksi. Senario aplikasi biasa ialah jenis kelas generik tidak diketahui sebelum masa jalan dan perlu dibuat berdasarkan rentetan yang mewakili nama yang layak sepenuhnya.
Untuk menggunakan refleksi untuk mencipta kelas generik secara dinamik, anda perlu menggunakan kaedah 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>
Kod contoh di atas membina contoh Task<Item>
secara dinamik. Jika jenis sasaran tidak diketahui pada masa jalanan, ia boleh dibina secara dinamik dengan menghantar nama jenis yang layak sepenuhnya (rentetan):
<code class="language-csharp">// 使用字符串表示获取类型 Type specificType = Type.GetType("namespace.TaskA`1"); // 注意 `1` 表示泛型参数个数 // 传递类型参数并创建实例 Type[] typeArgs = { typeof(Item) }; object instance = Activator.CreateInstance(specificType.MakeGenericType(typeArgs));</code>
Kaedah ini membolehkan pembangun mencipta kejadian kelas generik secara dinamik tanpa mengetahui jenis tertentu pada masa penyusunan. Ini amat berguna dalam senario seperti membuat kesimpulan jenis daripada fail konfigurasi atau pengaturcaraan dipacu data.
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Objek C# Generik Secara Dinamik Menggunakan Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!