故事:
我试图在名为“模板”的类中调用它。基本上我会喜欢它,如果我可以将一个字符串传递给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);
如果您需要更多信息,请告诉我们。
提前致谢!!
答案 0 :(得分:2)
如果您要调用的方法位于同一个类中,则不需要另一个Template实例。您可以使用 this
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);
}
}
答案 1 :(得分:1)
Activator.CreateInstance
的第一个参数是类的类型,然后是类型构造函数的参数。
您正在尝试使用构造函数的无参数创建Template
类的实例。但是没有没有参数的构造函数。
尝试在Template
类中添加构造函数,该类不带参数:
public class Template
{
//......
public Template()
{
}
}