繁体   English   中英

关于使用反射调用方法的问题

[英]Question on calling a method using reflection

今天美丽的晴天! 但是,我不能享受它,因为我已经尝试在Mono中调用动态方法2天了:-(

故事:

我正在尝试在名为“模板”的类中调用它。 基本上,如果我可以将字符串传递给Template并运行该方法(在Template类中定义),则我会很喜欢。 到目前为止,模板类看起来像这样。

namespace Mash
{
    public class Template
    {
        public Template(string methodToCall)
        {
            Type type = this.GetType();
            object ob = Activator.CreateInstance(type);
            object[] arguments = new object[52];
            type.InvokeMember(methodToCall,
                          BindingFlags.InvokeMethod,
                          null,
                          ob,
                          arguments);
        }
        public void methodIWantToCall()
        {
            Console.WriteLine("I'm running the Method!");
        }
    }
}

在编译期间没有收到错误。 但是,一旦运行它,我就会

'未处理的异常:System.MissingMethodException:未找到方法:'未找到默认构造函数... Mash.Template的ctor()'。

我认为这里失败了:

object ob = Activator.CreateInstance(type);

如果您需要更多信息,请告诉我。

提前致谢!!

你不需要模板的另一个实例,如果你要调用的方法是在同一class.You可以使用

    public class Template
    {        
        public Template(string methodToCall)
        {
              this.GetType().InvokeMember(methodToCall,
                          BindingFlags.InvokeMethod,
                          null,
                          this,
                          null);

        }
        public void methodIWantToCall()
        {
            Console.WriteLine("I'm running the Method!");
        }
   }

我用以下方法进行了测试:

class Program
{
    public static void Main(string[] args)
    {
        Template m = new Template("methodIWantToCall");
        Console.ReadKey(true);

    }
 }

Activator.CreateInstance的第一个参数是类的类型,然后跟随该类型的构造函数的参数。

您正在尝试不使用构造函数的参数来创建Template类的实例。 但是没有没有参数的构造函数。

尝试将构造函数添加到您的Template类中,该构造函数不使用任何参数:

public class Template
{
    //......
    public Template()
    {
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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