11
votes

Comment exécuter une méthode statique privée avec des paramètres facultatifs via une réflexion?

J'ai une classe avec une méthode statique privée avec un paramètre facultatif. Comment puis-je l'appeler d'une autre classe via une réflexion? Il y a une similaire question , mais il n'adresse pas la méthode statique ou les paramètres facultatifs. xxx

Comment puis-je appeler foo.bar ("test") et foo.bar () (par exemple, sans passer le paramètre facultatif)?


0 commentaires

3 Réponses :


29
votes

Les valeurs de paramètre facultatif en C # sont compilées par injection de ces valeurs à l'ASCITE. C'est à dire. Même si votre code est xxx

le compilateur génère en fait un appel comme xxx

lors de la recherche de la méthode, vous devez traiter les paramètres facultatifs comme Paramètres réguliers. xxx

Si vous savez exactement quelles valeurs vous souhaitez appeler la méthode avec vous pouvez faire: xxx

Si vous n'avez que certains des paramètres et que vous souhaitez respecter les valeurs des par défaut, vous devez inspecter la méthode paramètreInfo Pour voir si les paramètres sont facultatifs et quelles sont ces valeurs. Par exemple, pour imprimer les valeurs par défaut de ces paramètres, vous pouvez utiliser le code suivant: xxx


1 commentaires

Qu'en est-il de la partie de la méthode statique?



2
votes

Utilisation de cette classe xxx

Vous pouvez utiliser le code suivant pour l'appeler avec les valeurs par défaut xxx

si la méthode avait quelques-unes paramètres non facultatifs, vous devrez les insérer dans le tableau de paramètres avant d'appeler la méthode.

par exemple par exemple xxx

vous demanderait de faire xxx

avant d'invoquer


0 commentaires

1
votes

Quelque chose que j'ai écrit pour mes tests de l'unité: xxx pré>

Appelez-le comme pour appeler une fonction statique privée: p>

var success = TryInvokeMethod(typeof(Foo), null, "MyPrivateStaticFunc", BindingFlags.NonPublic | BindingFlags.Static, out result, arg1ToPass);


0 commentaires