繁体   English   中英

使用反射来动态调用函数会产生错误:非静态方法需要目标

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM