如何使用reflection在.NET中调用重载的方法

有没有办法在.NET(2.0)中使用reflection调用一个重载的方法。 我有一个应用程序dynamic实例化派生自一个公共基类的类。 出于兼容的目的,这个基类包含两个同名的方法,一个带有参数,另外一个没有。 我需要通过Invoke方法调用无参数方法。 现在,我得到的只是一个错误,告诉我我试图调用一个模糊的方法。

是的,我只能将该对象作为我的基类的一个实例,并调用我需要的方法。 最终发生,但现在,内部并发症是不会允许的。

任何帮助将是伟大的! 谢谢。

你必须指定你想要的方法:

class SomeType { void Foo(int size, string bar) { } void Foo() { } } SomeType obj = new SomeType(); // call with int and string arguments obj.GetType() .GetMethod("Foo", new Type[] { typeof(int), typeof(string) }) .Invoke(obj, new object[] { 42, "Hello" }); // call without arguments obj.GetType() .GetMethod("Foo", new Type[0]) .Invoke(obj, new object[0]); 

是。 当您调用该方法传递匹配所需重载的参数。

例如:

 Type tp = myInstance.GetType(); //call parameter-free overload tp.InvokeMember( "methodName", BindingFlags.InvokeMethod, Type.DefaultBinder, myInstance, new object[0] ); //call parameter-ed overload tp.InvokeMember( "methodName", BindingFlags.InvokeMethod, Type.DefaultBinder, myInstance, new { param1, param2 } ); 

如果你这样做(换句话说,通过查找MemberInfo并调用Invoke),要小心你得到正确的一个 – 无参数的重载可能是第一个find的。

使用带有System.Type []的GetMethod重载,并传递一个空的Type [];

 typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );