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>
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>
Dapatkan objek MethodInfo
, anda boleh mendapatkannya selepas membuat perwakilan: MethodInfo
<code class="language-c#">var methodInfo = method.Method.MakeGenericMethod(type1, type2);</code>
<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>
jenis objek dan parameter: MethodInfo
<code class="language-c#">var methodInfo = method.Method.GetGenericMethodDefinition(); methodInfo.MakeGenericMethod(type1, type2).Invoke(null, new object[] { collection });</code>
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!