中的反射调用重载方法。NET (2.0).我有一个应用程序,可以动态实例化从公共基类派生的类。出于兼容性考虑,此基类包含两个同名方法,一个带参数,另一个不带参数。我需要通过 Invoke 方法调用无参数方法。现在,我得到的只是一个错误,告诉我我正试图调用一个模糊的方法。
是的,我 可以只是将对象强制转换为我的基类的实例,然后调用我需要的方法。最终发生 威尔,但现在,内部并发症将不允许它。
任何帮助将是巨大的! 谢谢。
是的。当您调用该方法时,传递与所需重载匹配的参数。
例如:
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) ,要小心找到正确的——没有参数的重载可能是第一个找到的。
使用接受 System.Type []的 GetMethod 重载,并传递一个空 Type [] ;
typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );
你必须指定你想要的方法:
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]);