[Mono-dev] System.Type GetMethod problem.

Arek Waliszewski arek at forcom.com.pl
Mon Aug 6 04:22:08 EDT 2007


There is something wrong with Type.GetMethod() implementation.
Look:

using System;
using System.Reflection;

namespace Test
{
    class A
    {
        public virtual void f(int i1, int i2) {}
        public virtual void f(int i1, int i2, bool b) {}
    }

    class B : A
    {
        public override void f(int i1, int i2, bool b) {}
    }

    static class Program
    {
        private const BindingFlags BINDING_FLAGS
            = BindingFlags.Public | BindingFlags.NonPublic
            | BindingFlags.Instance | BindingFlags.Static
            | BindingFlags.IgnoreCase;

        [STAThread]
        static void Main()
        {
            Type tB = typeof(B);
            MethodInfo mi = tB.GetMethod("f", BINDING_FLAGS);

            if (mi != null)
                Console.WriteLine("Method was found!");
        }
    }
}

On Microsoft .NET this program raises 
System.Reflection.AmbiguousMatchException, which is correct behavior IMHO.

On Mono GetMethod returns 'public override void f(int i1, int i2, bool 
b)' from class B. It works as it was specified BindingFlags.DeclaredOnly 
flag.

What do you think?

Regards
Arek




More information about the Mono-devel-list mailing list