Rumah > pembangunan bahagian belakang > C++ > Mengapa Kod Refleksi Saya Membuang 'objek tidak sepadan dengan jenis sasaran' Apabila Menggunakan Kaedah Berparameter?

Mengapa Kod Refleksi Saya Membuang 'objek tidak sepadan dengan jenis sasaran' Apabila Menggunakan Kaedah Berparameter?

DDD
Lepaskan: 2025-01-18 02:46:13
asal
295 orang telah melayarinya

Why Reflection Code Throws "object does not match target type"

Gunakan refleksi untuk memanggil kaedah dengan parameter

Penerangan masalah:

Saya menemui pengecualian "Objek tidak sepadan dengan jenis sasaran" apabila cuba memanggil kaedah dengan parameter melalui pantulan. Walau bagaimanapun, jika kaedah dipanggil tanpa parameter, ia berjaya dilaksanakan.

Penyelesaian:

Untuk menyelesaikan isu ini, pastikan anda menggunakan tika yang betul semasa memanggil kaedah tersebut. Dalam baris berikut dalam blok "else", gantikan "methodInfo" dengan "classInstance":

<code class="language-csharp">result = methodInfo.Invoke(classInstance, parametersArray);</code>
Salin selepas log masuk

Penjelasan terperinci:

Dalam pengaturcaraan berorientasikan objek, setiap kaedah dikaitkan dengan contoh objek. Apabila memanggil kaedah melalui refleksi, adalah penting untuk menyediakan contoh yang betul untuk melaksanakan panggilan. Dalam kod yang disediakan, kaedah "Jalankan" ditakrifkan sebagai kaedah contoh kelas "Utama". Oleh itu, ia mesti dipanggil pada contoh kelas.

Pada mulanya, cuba panggil kaedah menggunakan "methodInfo" sebagai parameter pertama kaedah "Invoke". Walau bagaimanapun, "methodInfo" mewakili objek MethodInfo, bukan contoh kelas "Utama". Pembolehubah "classInstance" (sebelum ini dibuat menggunakan "Activator.CreateInstance") memegang tika yang harus digunakan untuk panggilan.

Dengan mengubah suai kod untuk memanggil kaedah dengan "classInstance" sebagai parameter pertama, tika yang betul disediakan dan kaedah itu boleh berjaya dipanggil dengan parameter yang ditentukan.

Kod diubah suai:

<code class="language-csharp">...
if (parameters.Length == 0)
{
    // 这部分工作正常
    result = methodInfo.Invoke(classInstance, null);
}
else
{
    object[] parametersArray = new object[] { "Hello" };

    // 现在调用可以正常工作了
    result = methodInfo.Invoke(classInstance, parametersArray);
}
...</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Kod Refleksi Saya Membuang 'objek tidak sepadan dengan jenis sasaran' Apabila Menggunakan Kaedah Berparameter?. 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