Laissez-moi essayer de donner un petit exemple.MethodInfo.Invoke avec un délégué dans Object [] params
class Session (
public delegate string CleanBody();
public static void Execute(string name, string q, CleanBody body) ...
peut être utilisé comme:
Session.Execute("foo", "bar", delegate() { string x="beep"; /* whatever*/ return x; });
Mais si je dois courir est par MethodInfo.Invoke - comme dans différents dll aucun type de dépendances de toute façon. Comme:
Type type = Type.GetType("Bla.Session, FooSessionDll", true);
MethodInfo methodInfo = type.GetMethod("Execute");
Object [] args = { "foo", "bar", delegate() // Doesn't compile, now that ?
{
string x="beep"; /* whatever*/ return x;
}
methodInfo.Invoke("Trial Execution :-)", args);
Quelle que soit astuce/cast serait appliqué devrait être telle qu'elle arrive toujours à exécuter en tant que délégué véritable. délégué réel (s) peut avoir des signatures plus complexes, etc., etc.
S'il vous plaît expliquer avec plus de détails pourquoi vous voulez faire une telle chose déroutante. Il pourrait y avoir un meilleur moyen. – ChaosPandion
Malheureusement, il n'y a pas beaucoup de marge de manœuvre pour le casting de type avec les délégués. Je devrais d'abord remettre en question l'architecture générale. Sans un raisonnement clair, certaines questions peuvent ne pas avoir de bonne réponse. – SamuelWarren
Il n'y a rien de déroutant à ce sujet - juste essayer de répliquer par reclection l'appel exact qu'il pourrait faire s'il prenait la dépendance de type. C'est tout. Il y a quelques classes spécilazed dans CLR qui font un "enveloppement" très limité des délégués dans les classes Object-compat - j'ai juste besoin d'une variante plus générale de la même. Le pointeur B (Session.Execute) est un énorme paquet lageacy qui a encore des "clients" parmi les DLL chargées par le côté A (en faisant MethodInfo.Invoke). – ZXX