Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用反射调用方法是行不通的_C#_Asp.net_Reflection - Fatal编程技术网

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()
    (我发现它更具可读性)