/// <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">&gt;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);
        }
        /// <summary>通过提供的信息查找高度派生的类型。</summary>
        /// <param name="match">候选匹配。</param>
        /// <param name="cMatches">匹配数。</param>
        /// <returns>派生程度最高的方法。</returns>
        internal static MethodBase FindMostDerivedNewSlotMeth(
            MethodBase[] match,
            int cMatches)
        {
            int        num1       = 0;
            MethodBase methodBase = (MethodBase)null;

            for (int index = 0; index < cMatches; ++index)
            {
                int hierarchyDepth = RuntimeTypeHelper.GetHierarchyDepth(match[index].DeclaringType);
                if (hierarchyDepth == num1)
                {
                    int num2 = methodBase != (MethodBase)null ? 1 : 0;
                    throw new AmbiguousMatchException();
                }
                if (hierarchyDepth > num1)
                {
                    num1       = hierarchyDepth;
                    methodBase = match[index];
                }
            }
            return(methodBase);
        }