int IComparer.Compare(object m1, object m2)
    {
        var me1 = (MethodBase)m1;
        var me2 = (MethodBase)m2;

        if (me1.DeclaringType != me2.DeclaringType)
        {
            // m2's type derives from m1's type, favor m2
            if (me1.DeclaringType.IsAssignableFrom(me2.DeclaringType))
            {
                return(1);
            }
            // m1's type derives from m2's type, favor m1
            if (me2.DeclaringType.IsAssignableFrom(me1.DeclaringType))
            {
                return(-1);
            }
        }
        int p1 = MethodBinder.GetPrecedence((MethodBase)m1);
        int p2 = MethodBinder.GetPrecedence((MethodBase)m2);

        if (p1 < p2)
        {
            return(-1);
        }
        if (p1 > p2)
        {
            return(1);
        }
        return(0);
    }
Exemplo n.º 2
0
    int IComparer.Compare(object m1, object m2)
    {
        int p1 = MethodBinder.GetPrecedence((MethodBase)m1);
        int p2 = MethodBinder.GetPrecedence((MethodBase)m2);

        if (p1 < p2)
        {
            return(-1);
        }
        if (p1 > p2)
        {
            return(1);
        }
        return(0);
    }
Exemplo n.º 3
0
        int IComparer <MaybeMethodBase> .Compare(MaybeMethodBase m1, MaybeMethodBase m2)
        {
            MethodBase me1 = m1.UnsafeValue;
            MethodBase me2 = m2.UnsafeValue;

            if (me1 == null && me2 == null)
            {
                return(0);
            }
            else if (me1 == null)
            {
                return(-1);
            }
            else if (me2 == null)
            {
                return(1);
            }

            if (me1.DeclaringType != me2.DeclaringType)
            {
                // m2's type derives from m1's type, favor m2
                if (me1.DeclaringType.IsAssignableFrom(me2.DeclaringType))
                {
                    return(1);
                }

                // m1's type derives from m2's type, favor m1
                if (me2.DeclaringType.IsAssignableFrom(me1.DeclaringType))
                {
                    return(-1);
                }
            }

            int p1 = MethodBinder.GetPrecedence(me1);
            int p2 = MethodBinder.GetPrecedence(me2);

            if (p1 < p2)
            {
                return(-1);
            }
            if (p1 > p2)
            {
                return(1);
            }
            return(0);
        }