Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memilih Kaedah Generik Terlebih Beban yang Betul dalam .NET Menggunakan Refleksi?
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>Kaedah
dalam refleksi tidak mencukupi untuk tugasan ini kerana ia tidak dapat membezakan antara beban berlebihan ini. GetMethod
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>
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>Pendekatan ini membolehkan kami mendapatkan kaedah yang kami perlukan tanpa bergantung pada rentetan berisiko atau carian masa jalan.
Dapatkan objek MethodInfo
, anda boleh mendapatkannya selepas membuat perwakilan: MethodInfo
<code class="language-c#">var methodInfo = method.Method.MakeGenericMethod(type1, type2);</code>Kaedah sambungan statik
<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>Info Kaedah Penyahgandingan dan jenis parameter
jenis objek dan parameter: MethodInfo
<code class="language-c#">var methodInfo = method.Method.GetGenericMethodDefinition(); methodInfo.MakeGenericMethod(type1, type2).Invoke(null, new object[] { collection });</code>Teknik ini membolehkan anda melakukan operasi yang kompleks seperti memilih kaedah contoh daripada kelas dan mendedahkannya untuk digunakan pada jenis yang berbeza.
Kesimpulan
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!