Utiliser la réflexion pour appeler des méthodes avec des paramètres
Description du problème :
J'ai rencontré l'exception "L'objet ne correspond pas au type cible" en essayant d'appeler une méthode avec des paramètres via la réflexion. Cependant, si la méthode est appelée sans paramètres, elle s’exécute correctement.
Solution :
Pour résoudre ce problème, assurez-vous que vous utilisez la bonne instance lors de l'appel de la méthode. Dans les lignes suivantes du bloc "else", remplacez "methodInfo" par "classInstance" :
<code class="language-csharp">result = methodInfo.Invoke(classInstance, parametersArray);</code>
Explication détaillée :
En programmation orientée objet, chaque méthode est associée à une instance d'objet. Lors de l’appel d’une méthode par réflexion, il est important de fournir l’instance correcte pour effectuer l’appel. Dans le code fourni, la méthode "Run" est définie comme une méthode d'instance de la classe "Main". Il faut donc l’appeler sur une instance de la classe.
Dans un premier temps, essayez d'appeler la méthode en utilisant "methodInfo" comme premier paramètre de la méthode "Invoke". Toutefois, « methodInfo » représente un objet MethodInfo, et non une instance de la classe « Main ». La variable "classInstance" (précédemment créée à l'aide de "Activator.CreateInstance") contient l'instance qui doit être utilisée pour l'appel.
En modifiant le code pour appeler la méthode avec "classInstance" comme premier paramètre, l'instance correcte est fournie et la méthode peut être appelée avec succès avec les paramètres spécifiés.
Code modifié :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!