Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mencipta Objek C# Generik Secara Dinamik Menggunakan Refleksi?

Bagaimana untuk Mencipta Objek C# Generik Secara Dinamik Menggunakan Refleksi?

DDD
Lepaskan: 2025-01-22 09:27:10
asal
239 orang telah melayarinya

How to Dynamically Create Generic C# Objects Using Reflection?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan