L'obtention d'un délégué de methodinfo
J'ai une liste déroulante qui est remplie par l'inspection d'une classe de méthodes, y compris ceux qui correspondent à une signature spécifique. Le problème est dans l'élément sélectionné de la liste et d'obtenir le délégué à l'appel de la méthode dans la classe. La première méthode fonctionne, mais je ne peux pas comprendre une partie de la deuxième.
Par exemple,
public delegate void MyDelegate(MyState state);
public static MyDelegate GetMyDelegateFromString(string methodName)
{
switch (methodName)
{
case "CallMethodOne":
return MyFunctionsClass.CallMethodOne;
case "CallMethodTwo":
return MyFunctionsClass.CallMethodTwo;
default:
return MyFunctionsClass.CallMethodOne;
}
}
public static MyDelegate GetMyDelegateFromStringReflection(string methodName)
{
MyDelegate function = MyFunctionsClass.CallMethodOne;
Type inf = typeof(MyFunctionsClass);
foreach (var method in inf.GetMethods())
{
if (method.Name == methodName)
{
//function = method;
//how do I get the function to call?
}
}
return function;
}
Comment puis-je obtenir le commentaire sur l'article de la deuxième méthode de travail? Comment puis-je lancer le MethodInfo
dans le délégué?
Merci!
Edit: Voici la solution de travail.
public static MyDelegate GetMyDelegateFromStringReflection(string methodName)
{
MyDelegate function = MyFunctionsClass.CallMethodOne;
Type inf = typeof(MyFunctionsClass);
foreach (var method in inf.GetMethods())
{
if (method.Name == methodName)
{
function = (MyDelegate)Delegate.CreateDelegate(typeof(MyDelegate), method);
}
}
return function;
}
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de demander une certaine forme de Délégué.CreateDelegate(), selon que la méthode en question est un statique ou de la méthode d'instance.
Delegate
type ou pas. Dans ce cas, l'OP semble indiquer qu'il est possible de pré-supposerMyDelegate
, auquel cas Nate et la solution de l'OP en compte sont les meilleurs. Celui-ci, d'autre part, est une excellente réponse pour la autres question, qui est de savoir quoi faire si vous n'avez pas accès à unDelegate
type (c'est à dire en général, vous avez obtenu unMethodInfo
out-of-the blue par le nom seul)... mais faut justement un type délégué afin de créer un délégué (un peu tristement célèbre.NET
poule et de l'œuf problème).