Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencipta Objek C# Generik dengan Spesifikasi Jenis Dinamik Menggunakan Refleksi?

Bagaimanakah Saya Boleh Mencipta Objek C# Generik dengan Spesifikasi Jenis Dinamik Menggunakan Refleksi?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-22 09:41:081015semak imbas

How Can I Create Generic C# Objects with Dynamic Type Specification Using Reflection?

Gunakan refleksi untuk mencipta objek generik C# dengan spesifikasi jenis dinamik

Dalam C# anda mungkin perlu mencipta objek generik secara dinamik, seperti contoh kelas Tugas, di mana jenis T tidak diketahui terlebih dahulu. Anda boleh menggunakan kaedah Activator.CreateInstance bersama dengan refleksi C# untuk menyelesaikan masalah ini.

Untuk mencipta objek TaskA atau TaskB generik secara dinamik, ikut langkah berikut:

  1. Tentukan jenis kelas generik: Gunakan Type.GetType() untuk mendapatkan maklumat jenis kelas generik, seperti "ruang nama.TaskA" atau "ruang nama.TaskB".
  2. Nyatakan parameter jenis generik: Tentukan parameter jenis kelas generik, seperti typeof(Item).
  3. Buat jenis generik: Gunakan MakeGenericType untuk mencipta jenis generik khusus pada jenis kelas generik, contohnya makeme = d1.MakeGenericType(typeArgs).
  4. Buat tika: Gunakan Activator.CreateInstance untuk mencipta tika jenis generik yang dijana secara dinamik, contohnya objek o = Activator.CreateInstance(makeme).

Contohnya:

<code class="language-csharp">Type d1 = Type.GetType("namespace.TaskA`1");
Type[] typeArgs = { typeof(Item) };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);</code>

Jika kelas generik menerima berbilang parameter jenis, pastikan anda memasukkan koma apabila meninggalkan nama jenis, contohnya:

<code class="language-csharp">Type type = typeof(IReadOnlyDictionary<,>); </code>

Nota: Contoh kod menganggap bahawa "ruang nama.TaskA1" 和Item是已定义的类型。 实际应用中,需要根据您的具体项目替换这些占位符。 此外,错误处理(例如,处理Type.GetType()` returns null) adalah kritikal dalam persekitaran pengeluaran.

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

Kenyataan:
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