从methodinfo获取委托
我有一个下拉列表,通过检查类的方法并包括与特定签名匹配的方法来填充。 问题在于从列表中获取所选项目并让委托在类中调用该方法。 第一种方法有效,但我无法弄清楚第二种方法的一部分。
例如,
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; }
如何使第二种方法的注释部分工作? 如何将MethodInfo
转换为委托?
谢谢!
编辑:这是工作解决方案。
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; }
您需要调用某种forms的Delegate.CreateDelegate() ,具体取决于所讨论的方法是静态方法还是实例方法。
上述就是C#学习教程:从methodinfo获取委托分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
private static Delegate CreateDelegate(this MethodInfo methodInfo, object target) { Func getType; var isAction = methodInfo.ReturnType.Equals((typeof(void))); var types = methodInfo.GetParameters().Select(p => p.ParameterType); if (isAction) { getType = Expression.GetActionType; } else { getType = Expression.GetFuncType; types = types.Concat(new[] { methodInfo.ReturnType }); } if (methodInfo.IsStatic) { return Delegate.CreateDelegate(getType(types.ToArray()), methodInfo); } return Delegate.CreateDelegate(getType(types.ToArray()), target, methodInfo.Name); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1019646.html