Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Membuat Objek Generik Secara Dinamik dalam C# Menggunakan Refleksi?

Bagaimanakah Saya Boleh Membuat Objek Generik Secara Dinamik dalam C# Menggunakan Refleksi?

DDD
Lepaskan: 2025-01-22 09:32:09
asal
806 orang telah melayarinya

How Can I Dynamically Create Generic Objects in C# Using Reflection?

Gunakan refleksi untuk mencipta objek generik secara dinamik dalam C#

Dalam C#, kita sering menghadapi situasi di mana kita perlu mencipta objek secara dinamik berdasarkan rentetan jenis. Pendekatan ini menggunakan refleksi untuk mengelakkan pengisytiharan jenis eksplisit.

Pertimbangkan struktur kelas berikut:

public class Item
{ }

public class Task<T>
{ }

public class TaskA<T> : Task<T>
{ }

public class TaskB<T> : Task<T>
{ }
Salin selepas log masuk

Matlamat kami adalah untuk menggunakan refleksi untuk mencipta tika TaskA atau TaskB secara dinamik. Memandangkan jenisnya tidak diketahui terlebih dahulu, kami akan bergantung pada rentetan jenis, seperti "ruang nama.TaskA" atau "ruang nama.TaskAB".

Menggunakan refleksi, kita boleh mencapainya seperti berikut:

var type = Type.GetType("namespace.TaskA`1"); // 将“namespace”替换为您实际的命名空间
Type[] typeArgs = { typeof(Item) };
var makeme = type.MakeGenericType(typeArgs);
object instance = Activator.CreateInstance(makeme);
Salin selepas log masuk

Kaedah ini mencipta instance TaskA secara dinamik berdasarkan rentetan jenis yang ditentukan. Jika kelas generik menerima berbilang jenis, pastikan anda memasukkan koma apabila meninggalkan nama jenis, seperti dalam contoh berikut:

Type type = typeof(IReadOnlyDictionary);
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Objek Generik Secara Dinamik dalam C# Menggunakan Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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