我正在开发一个能力系统,该系统在 Abilities 类中具有预先编写的函数并处理运行时方法,因此我也将委托用于 lambda 表达式。显然我需要使用反射调用预先编写的方法。
我使用包装方法的委托:
public delegate void AbilityAction();
Abilities 类包含所有的能力方法。
我想让以下部分静态:
var mi = Abilities.instance.GetType ().GetMethod (abilities[i].name, BindingFlags.Instance | BindingFlags.NonPublic) as MethodInfo;
AbilityAction code = (AbilityAction)Delegate.CreateDelegate(typeof(AbilityAction), this, mi);
然后调用它:
AbilityAction code = GetMethodInClass(abilities[i].name /*e.g. MegaJump*/, Abilities, AbilityAction);
我已经尽力了,但它给了我错误:
这个
约束不能是特殊类“System.Delegate”
public static Delegate GetMethodInClass<T, D>(string methodName, T sourceClass, D delegateType) where D : Delegate {
var mi = sourceClass.GetType().GetMethod (methodName, BindingFlags.Instance | BindingFlags.NonPublic) as MethodInfo;
return (D)Delegate.CreateDelegate(typeof(delegateType), this, mi);
}
提前致谢。
qq_花开花谢_0
相关分类