Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memilih Kaedah Generik Terlebih Beban yang Betul dalam .NET Menggunakan Refleksi?

Bagaimana untuk Memilih Kaedah Generik Terlebih Beban yang Betul dalam .NET Menggunakan Refleksi?

Barbara Streisand
Lepaskan: 2025-01-11 13:31:42
asal
531 orang telah melayarinya

How to Select the Correct Overloaded Generic Method in .NET Using Reflection?

Gunakan refleksi untuk memilih kaedah generik yang betul

Cabaran: Kenal pasti kaedah generik yang terlebih beban

Dalam .NET, apabila terdapat banyak kelebihan kaedah generik, mungkin sukar untuk cuba menggunakan refleksi untuk memilih versi yang betul. Sebagai contoh, kaedah statik dalam kelas System.Linq.Queryable mempunyai dua definisi untuk kaedah Where:

<code class="language-c#">static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T, bool>> predicate)
static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T, bool>> predicate)</code>
Salin selepas log masuk
Kaedah

dalam refleksi tidak mencukupi untuk tugasan ini kerana ia tidak dapat membezakan antara beban berlebihan ini. GetMethod

Penyelesaian: Gunakan perwakilan berparameter

Untuk memilih kaedah generik yang betul, kami boleh menggunakan teknik yang melibatkan penciptaan perwakilan berparameter. Kita boleh memilih kaedah pada masa penyusunan dengan mencipta perwakilan

atau Action yang sepadan dengan kiraan generik dan kiraan parameter beban berlebihan yang dikehendaki: Func

Contoh 1: Pilih kaedah yang mengambil jenis generik dan satu parameter: Where

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

Contoh 2: Memilih kaedah yang mengambil dua jenis generik dan dua parameter: Where

<code class="language-c#">var method = new Action<object, object>(MyClass.DoSomething<object, object>);</code>
Salin selepas log masuk
Pendekatan ini membolehkan kami mendapatkan kaedah yang kami perlukan tanpa bergantung pada rentetan berisiko atau carian masa jalan.

Dapatkan objek MethodInfo

Jika anda memerlukan objek

, anda boleh mendapatkannya selepas membuat perwakilan: MethodInfo

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

Kaedah sambungan statik memerlukan pendekatan yang lebih kompleks sedikit, tetapi prinsip yang sama digunakan:

<code class="language-c#">var method = new Func<IQueryable<object>, Expression<Func<object, bool>>, IQueryable<object>>(Queryable.Where<object>);

var methodInfo = method.Method.MakeGenericMethod(modelType);</code>
Salin selepas log masuk
Info Kaedah Penyahgandingan dan jenis parameter

Kadangkala, anda mungkin perlu memisahkan

jenis objek dan parameter: MethodInfo

<code class="language-c#">var methodInfo = method.Method.GetGenericMethodDefinition();

methodInfo.MakeGenericMethod(type1, type2).Invoke(null, new object[] { collection });</code>
Salin selepas log masuk
Teknik ini membolehkan anda melakukan operasi yang kompleks seperti memilih kaedah contoh daripada kelas dan mendedahkannya untuk digunakan pada jenis yang berbeza.

Kesimpulan

Dengan menggunakan perwakilan berparameter kita boleh memintas had

dan memilih kaedah generik yang betul pada masa penyusunan. Pendekatan ini memastikan keselamatan jenis dan mengelakkan carian dinamik yang tidak perlu. GetMethod

Atas ialah kandungan terperinci Bagaimana untuk Memilih Kaedah Generik Terlebih Beban yang Betul dalam .NET Menggunakan Refleksi?. 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