有没有一种方法可以使用.NET(2.0)中的反射来调用重载方法。我有一个应用程序,该应用程序可以动态实例化从通用基类派生的类。出于兼容性目的,此基类包含2个同名的方法,一个带有参数,另一个不带参数。我需要通过Invoke方法调用无参数方法。现在,我得到的只是一个错误,告诉我我正在尝试调用一个模棱两可的方法。
是的,我可以将对象强制转换为基类的实例,然后调用所需的方法。最终将发生这种情况,但是现在,内部复杂性是不允许的。
任何帮助将是巨大的!谢谢。
Answers:
您必须指定所需的方法:
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),请小心,以确保正确无误-可能是首次发现无参数重载。