Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memanggil Kaedah Generik dengan Argumen Jenis Yang Ditentukan Masa Jalan?

Bagaimana untuk Memanggil Kaedah Generik dengan Argumen Jenis Yang Ditentukan Masa Jalan?

Linda Hamilton
Linda Hamiltonasal
2024-12-30 15:36:09735semak imbas

How to Call a Generic Method with a Runtime-Determined Type Argument?

Memanggil Kaedah Generik dengan Jenis Argumen Yang Dikenali Hanya Pada Masa Pelaksanaan

Masalah: Memanggil Kaedah Generik Secara Dinamik

Anda ingin menggunakan kaedah generik dengan hujah jenis yang tidak diketahui sehingga masa jalan. Sebagai contoh, anda mempunyai senarai antara muka dan anda ingin memanggil kaedah generik untuk setiap antara muka.

Penyelesaian: Invokasi Dinamik Berasaskan Refleksi

Memandangkan hujah jenis tidak diketahui semasa penyusunan masa, anda tidak boleh menggunakan seruan kaedah tradisional dengan generik. Sebaliknya, anda perlu menggunakan refleksi untuk menggunakan kaedah generik secara dinamik berdasarkan argumen jenis yang diperoleh semasa masa jalan.

Begini cara anda boleh melaksanakan pendekatan ini:

  1. Dapatkan Kaedah Generik: Gunakan Type.GetMethod untuk mendapatkan semula generik kaedah.
  2. Bina Argumen Jenis Generik: Gunakan Type.GetTypeArguments untuk mengenal pasti parameter jenis generik. Kemudian, cipta objek Jenis yang mewakili hujah jenis sebenar yang anda mahu gunakan.
  3. Buat Contoh Kaedah Generik: Gunakan MakeGenericMethod pada kaedah generik untuk mencipta contoh khusus dengan jenis yang diberikan hujah.
  4. Panggil Kaedah Generik: Akhir sekali, gunakan Invoke pada kaedah generik yang dibuat contoh untuk memanggilnya secara dinamik.

Contoh dalam Kod

// Original Method
public void Method<T>() {
    // Method body
}

// Main Method
var assembly = Assembly.GetExecutingAssembly();
var interfaces = assembly.GetTypes().Where(t => t.Namespace == "MyNamespace.Interfaces");

foreach (var interfaceType in interfaces) {
    MethodInfo genericMethod = typeof(Test).GetMethod("Method");
    MethodInfo specificMethod = genericMethod.MakeGenericMethod(interfaceType);
    specificMethod.Invoke(null, null); // No arguments for this example
}

Dengan menggunakan refleksi, pendekatan ini membolehkan anda memanggil kaedah generik secara dinamik dengan argumen jenis yang tidak diketahui pada masa jalan.

Atas ialah kandungan terperinci Bagaimana untuk Memanggil Kaedah Generik dengan Argumen Jenis Yang Ditentukan Masa Jalan?. 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