![](/img/trans.png)
[英]Receiving error message: System.Reflection.TargetException: Non-static method requires a target
[英]Using reflection to dynamically call a function gives error: Non-static method requires a target
我正在尝试使用反射来动态调用函数,但不确定如何使它工作。
这是我的主要功能:
public partial class WorkerRole : RoleEntryPoint
{
public override void Run()
{
while (true)
{
List<string> Firms = new List<string>();
Firms.Add("BHP");
foreach (string Firm in Firms)
{
typeof(WorkerRole).GetMethod(string.Format("{0}GetProfiles", Firm), BindingFlags.Instance | BindingFlags.Public).Invoke(null, null);
}
break;
}
Thread.Sleep(Timeout.Infinite);
}
}
这是我动态调用的函数之一的示例(它们都具有相同的签名):
public partial class WorkerRole : RoleEntryPoint
{
public List<string> BHPGetProfiles()
{
// Do tasks specific to BHP
}
}
我从上述typeof开头的行中遇到的错误是:
附加信息:非静态方法需要一个目标。
我不想将我的GetProfiles方法设置为静态,但我认为添加BindingFlags.Instance应该可以解决此问题?
谢谢你的帮助!
您说对了, BindingFlags.Instance
意味着您的方法不是静态的。 因此,您对GetMethod
的调用未返回null
。
相反,问题是,你Invoke
呼叫提供null
的,而不是为对象this
通话。 它应该是第一个参数。 例如,如果要为正在执行Run()
的对象调用该方法,则应使用:
typeof(WorkerRole).GetMethod(string.Format("{0}GetProfiles", Firm),
BindingFlags.Instance | BindingFlags.Public).Invoke(this, null);
有关Invoke
更多详细信息, Invoke
MSDN页面 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.