/// <summary>在提供的两种方法中找到最具有针对性的方法。</summary> /// <param name="m1">方法 1</param> /// <param name="paramOrder1">方法 1 的参数顺序</param> /// <param name="paramArrayType1">参数数组类型。</param> /// <param name="m2">方法 2</param> /// <param name="paramOrder2">方法 2 的参数顺序</param> /// <param name="paramArrayType2">>Paramter 数组类型。</param> /// <param name="types">要在其中进行搜索的类型。</param> /// <param name="args">参数。</param> /// <returns>表示匹配的 int。</returns> internal static int FindMostSpecificMethod( MethodBase m1, int[] paramOrder1, Type paramArrayType1, MethodBase m2, int[] paramOrder2, Type paramArrayType2, Type[] types, object[] args) { int mostSpecific = RuntimeTypeHelper.FindMostSpecific(m1.GetParameters(), paramOrder1, paramArrayType1, m2.GetParameters(), paramOrder2, paramArrayType2, types, args); if (mostSpecific != 0) { return(mostSpecific); } if (!RuntimeTypeHelper.CompareMethodSigAndName(m1, m2)) { return(0); } int hierarchyDepth1 = RuntimeTypeHelper.GetHierarchyDepth(m1.DeclaringType); int hierarchyDepth2 = RuntimeTypeHelper.GetHierarchyDepth(m2.DeclaringType); if (hierarchyDepth1 == hierarchyDepth2) { return(0); } return(hierarchyDepth1 < hierarchyDepth2 ? 2 : 1); }