C# 使用反射调用方法是行不通的
我有一节课C# 使用反射调用方法是行不通的,c#,asp.net,reflection,C#,Asp.net,Reflection,我有一节课 private class MyRouter { public string Json {get;set;} public string Class { get; set; } public string Method { get; set; } } 它必须通过Json Arg从类中调用方法,我如何通过反射来实现它?? 我这样做了,但没有任何帮助 MyRouter MR = new MyRouter(){initilising the class}; Assem
private class MyRouter
{
public string Json {get;set;}
public string Class { get; set; }
public string Method { get; set; }
}
它必须通过Json Arg从类中调用方法,我如何通过反射来实现它??
我这样做了,但没有任何帮助
MyRouter MR = new MyRouter(){initilising the class};
Assembly assembly = Assembly.Load("Common");
Type t = assembly.GetType("Common." + MR.Class);
var x = t.GetMethod(MR.Method ).Invoke(MR.Json,null);
请参阅以下文件:
ConstructorInfo constr = t.GetConstructor(Type.EmptyTypes);
object myObj = constr.Invoke(new object[]{});
然后,您可以在该实例上调用您的方法,并将您的JSON
作为参数传递:
var x = t.GetMethod(MR.Method).Invoke(myObj,MR.Json);
如果要调用的方法是
static
,则可以使用
var x = t.GetMethod(MR.Method).Invoke(null, new object[] { MR.Json });
var obj = Activator.CreateInstance(t);
var x = t.GetMethod(MR.Method).Invoke(obj, new object[] { MR.Json });
如果它不是静态的
,则需要创建对象的新实例,并使用该实例调用。你可以用
var x = t.GetMethod(MR.Method).Invoke(null, new object[] { MR.Json });
var obj = Activator.CreateInstance(t);
var x = t.GetMethod(MR.Method).Invoke(obj, new object[] { MR.Json });
它怎么不起作用?有什么异常吗?它说:对象与目标类型不匹配。我如何通过Argmmmm从类中调用方法?我不是唯一一个看到这些是属性而不是方法的人吗?您需要使用[Type].GetProperties()@Franck,据我所知,它们是要调用的类和方法的名称和参数。+1如果该方法是静态的,您可以提供
null
作为第一个参数。另一种方法是创建一个对象实例,您可以调用Activator.CreateInstance()
(我发现它更具可读性)