例如,
public delegate void MyDelegate(MyState state); public static MyDelegate GetMyDelegateFromString(string methodName) { switch(methodName) { caseCallMethodOne:返回MyFunctionsClass。 CallMethodOne; caseCallMethodTwo: return MyFunctionsClass.CallMethodTwo; 默认值:返回MyFunctionsClass.CallMethodOne; } } public static MyDelegate GetMyDelegateFromStringReflection(string methodName) { MyDelegate function = MyFunctionsClass.CallMethodOne; 输入inf = typeof(MyFunctionsClass); foreach(inf.GetMethods()中的var方法) { if(method.Name == methodName) { // function = method; //如何获取函数调用? } } 返回函数; }如何获取第二种方法的注释部分?如何将 MethodInfo 投入委托?
谢谢!
编辑:这是工作解决方案。
public static MyDelegate GetMyDelegateFromStringReflection methodName) { MyDelegate function = MyFunctionsClass.CallMethodOne; 输入inf = typeof(MyFunctionsClass); foreach(inf.GetMethods()中的var方法) { if(method.Name == methodName) { function =(MyDelegate)Delegate.CreateDelegate (typeof(MyDelegate),方法); } } 返回函数; }解决方案
你需要打电话某些形式的 Delegate.CreateDelegate(),具体取决于该方法是否为静态或实例方法。
I have a drop down list that is populated by inspecting a class's methods and including those that match a specific signature. The problem is in taking the selected item from the list and getting the delegate to call that method in the class. The first method works, but I cannot figure out part of the second.
For example,
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; }How do I get the commented out section of the second method to work? How do I cast the MethodInfo into the delegate?
Thanks!
Edit: Here is the working solution.
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; }解决方案
You'll need to call some form of Delegate.CreateDelegate(), depending on whether the method in question is a static or instance method.
更多推荐
从methodinfo获取代理
发布评论