Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memilih Kaedah Generik dengan Tepat dengan Refleksi pada Masa Penyusunan?

Bagaimana untuk Memilih Kaedah Generik dengan Tepat dengan Refleksi pada Masa Penyusunan?

Patricia Arquette
Lepaskan: 2025-01-11 13:37:43
asal
963 orang telah melayarinya

How to Accurately Select Generic Methods with Reflection at Compile Time?

Gunakan refleksi untuk memilih kaedah generik

Refleksi membenarkan kaedah panggilan dengan parameter jenis generik tertentu, tetapi apabila terdapat banyak beban generik, memilih kaedah yang sesuai boleh menjadi mencabar. Artikel ini menunjukkan pendekatan masa kompilasi untuk memilih kaedah generik sasaran dengan tepat dengan memanipulasi objek maklumat perwakilan dan kaedah.

Gunakan kaedah pemilihan perwakilan

Untuk kaedah statik, mencipta perwakilan dengan bilangan generik dan parameter yang diperlukan membolehkan pemilihan lebihan beban tertentu. Contohnya, untuk memilih lebihan pertama DoSomething<TModel>, ia hanya mempunyai satu parameter generik:

<code class="language-C#">var method = new Action<object>(MyClass.DoSomething<object>);</code>
Salin selepas log masuk

atau lebihan kedua, yang mempunyai dua parameter generik:

<code class="language-C#">var method = new Action<object, object>(MyClass.DoSomething<object, object>);</code>
Salin selepas log masuk

Untuk kaedah sambungan statik, ikut corak yang serupa, menggunakan jenis yang sesuai untuk mengendalikan parameter this:

<code class="language-C#">var method = new Func<IQueryable<object>, Expression<Func<bool>>, IQueryable<object>>(Queryable.Where<object>);</code>
Salin selepas log masuk

Dapatkan maklumat kaedah

Sifat

perwakilan Method menyediakan objek MethodInfo asas. Untuk mendapatkan definisi kaedah generik dan menyediakan parameter jenis tertentu:

<code class="language-C#">var methodInfo = method.Method.MakeGenericMethod(type1, type2);</code>
Salin selepas log masuk

Kaedah contoh

Untuk memilih kaedah contoh, prosesnya adalah serupa:

<code class="language-C#">var method = new Action<object>(instance.MyMethod<object>);
var methodInfo = method.Method.GetGenericMethodDefinition().MakeGenericMethod(type1);</code>
Salin selepas log masuk

Menyah gandingan pemilihan kaedah dan jenis parameter

Jika parameter jenis generik tidak ditentukan sehingga kemudian:

<code class="language-C#">var methodInfo = method.Method.GetGenericMethodDefinition();</code>
Salin selepas log masuk

Kemudian, hantar jenis yang diingini kepada MakeGenericMethod():

<code class="language-C#">methodInfo.MakeGenericMethod(type1, type2);</code>
Salin selepas log masuk

Kesimpulan

Pendekatan ini membolehkan pemilihan kaedah generik yang tepat pada masa penyusunan, mengelakkan carian masa jalan yang terdedah kepada ralat atau penggunaan rentetan. Ia menyediakan mekanisme yang teguh dan fleksibel untuk memanggil kaedah generik dengan pelbagai jenis parameter.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Kaedah Generik dengan Tepat dengan Refleksi pada Masa Penyusunan?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan