使用反射调用带参数的方法
问题描述:
尝试通过反射调用带参数的方法时,遇到异常“对象与目标类型不匹配”。但是,如果调用不带参数的方法,则可以成功执行。
解决方案:
要解决此问题,请确保在调用方法时使用了正确的实例。在“else”块中的以下行中,将“methodInfo”替换为“classInstance”:
<code class="language-csharp">result = methodInfo.Invoke(classInstance, parametersArray);</code>
详细解释:
在面向对象编程中,每个方法都与一个对象实例关联。通过反射调用方法时,务必提供正确的实例以执行调用。在提供的代码中,“Run”方法定义为“Main”类的实例方法。因此,必须在该类的实例上调用它。
最初,尝试使用“methodInfo”作为“Invoke”方法的第一个参数来调用该方法。但是,“methodInfo”表示MethodInfo对象,而不是“Main”类的实例。“classInstance”变量(之前使用“Activator.CreateInstance”创建)保存了应该用于调用的实例。
通过修改代码以使用“classInstance”作为第一个参数调用方法,提供了正确的实例,并且该方法可以成功地使用指定的参数调用。
修改后的代码:
<code class="language-csharp">... if (parameters.Length == 0) { // 这部分工作正常 result = methodInfo.Invoke(classInstance, null); } else { object[] parametersArray = new object[] { "Hello" }; // 现在调用可以正常工作了 result = methodInfo.Invoke(classInstance, parametersArray); } ...</code>
以上是为什么在调用参数化方法时我的反射代码会抛出'对象与目标类型不匹配”?的详细内容。更多信息请关注PHP中文网其他相关文章!