我试图通过传递包含函数名称的字符串来调用函数。
下面是我的代码,两者都不能工作。问题是我的MethodInfo变量mi总是null。
在调试中,我使用GetMethods方法来查看列出的所有函数。我试图调用的函数被列出,我已经仔细检查了拼写。我做错了什么?
object[] paraArray = new object[] { corpAct, secEvents };
MethodInfo mi = this.GetType().GetMethod(corpAct.DelegateName);
mi.Invoke(this, paraArray);
第二次尝试
Type[] paraTypes = new Type[] { typeof(IHoldingLog), typeof(SecurityEvent) };
object[] paraArray = new object[] { corpAct, secEvents };
MethodInfo mi = this.GetType().GetMethod(corpAct.DelegateName, paraTypes);
mi.Invoke(this, paraArray);
试图调用的函数,
void myFunction(IHoldingLog log, SecurityEvent sec)
我只是尝试使用下面的行,但仍然得到mi为null
MethodInfo mi = this.GetType().GetMethod(corpAct.DelegateName, BindingFlags.NonPublic);
默认情况下,GetMethod
只返回public
实例方法或静态方法。因此,如果您不指定BindingFlags
,默认情况下它将返回到BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public
。
使用下面的调用变体来包含非公共方法。
this.GetType().GetMethod("myMethod", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
如果你的方法有重载,那么你可以使用GetMethod
重载,它允许你指定参数类型来确定你想要的重载(如你的第二个例子)。如果您的方法没有重载,则无需指定参数类型。