Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mendapat Kaedah Generik dengan Argumen Jenis Dinamik dalam C# menggunakan Reflection?

Bagaimana untuk Mendapat Kaedah Generik dengan Argumen Jenis Dinamik dalam C# menggunakan Reflection?

Barbara Streisand
Barbara Streisandasal
2025-01-03 14:19:40698semak imbas

How to Invoke Generic Methods with Dynamic Type Arguments in C# using Reflection?

Memanggil Kaedah Generik dengan Argumen Jenis Dinamik

Dalam C#, memanggil kaedah generik dengan argumen jenis yang diketahui hanya pada masa pelaksanaan memerlukan memanfaatkan keupayaan refleksi. Cabaran asal melibatkan gelung melalui antara muka dalam ruang nama tertentu dan menggunakan kaedah generik menggunakan antara muka ini sebagai argumen.

Untuk mengatasinya, ikut langkah berikut:

  1. Cari Kaedah Generik: Gunakan Type.GetMethod untuk mendapatkan semula kaedah generik maklumat.
  2. Jadikan Kaedah Generik: Gunakan MakeGenericMethod untuk mencipta versi khusus kaedah generik untuk jenis yang dikehendaki.
  3. Gunakan Kaedah: Panggil Invoke pada kaedah yang dijana untuk melaksanakannya.

Untuk contoh, pertimbangkan kod berikut:

// Get the generic method
MethodInfo method = typeof(Test).GetMethod("CallMe");

// Get the list of interfaces in the specified namespace
var types = typeof(Test).Assembly
    .GetTypes()
    .Where(t => t.Namespace == "Interfaces");

// Loop through the interfaces
foreach (Type type in types)
{
    // Create a specialized generic method
    MethodInfo genericMethod = method.MakeGenericMethod(type);

    // Invoke the method with no target or arguments
    genericMethod.Invoke(null, null);
}

Dalam contoh ini, kami mendapatkan semula kaedah generik "CallMe", mencipta versi khusus untuk setiap jenis antara muka dan memanggilnya secara reflektif.

Nota: Jika jenis antara muka yang anda hadapi adalah generik sendiri, gunakan MakeGenericType dan bukannya MakeGenericMethod, masukkan jenis yang sesuai hujah.

Atas ialah kandungan terperinci Bagaimana untuk Mendapat Kaedah Generik dengan Argumen Jenis Dinamik dalam C# menggunakan Reflection?. 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