好朋友,我有以下问题:
我想将泛型派生类的事件挂钩到非泛型主类'通用方法。
问题是,它告诉我签名不合适:
ArgumentException:无法绑定到目标方法,因为其签名与委托类型的签名不同
这里有一些日志:
当事件是委托时:Denis<T1>() where T1 : IFieldUpdater;
handlerType: _FieldUpdater`1+Denis`1[IFieldUpdater,IFieldUpdater]
methodInfo: Void UpdateSubscribers[T2]()
当事件是委托时:Denis()
handlerType: _FieldUpdater`1+Denis[IFieldUpdater]
methodInfo: Void UpdateSubscribers[T2]()
如果我知道如何在这里制作可扩展/可折叠的盒子,那就太棒了,所以我可以放入相关的行:
public static class FieldUpdateMaster
{
private static void HookUpdaters()
{
Type updater = typeof(_FieldUpdater<IFieldUpdater>);
object instance = updater.GetProperty(nameof(_FieldUpdater<IFieldUpdater>.Instance),
BindingFlags.FlattenHierarchy |
BindingFlags.Static |
BindingFlags.Public)
?.GetValue(null); // get static Singleton Instance
EventInfo eventInfo = updater.GetEvent(nameof(_FieldUpdater<IFieldUpdater>.UpdateSubscribers));
MethodInfo methodInfo = typeof(FieldUpdateMaster).GetMethod(nameof(UpdateSubscribers),
BindingFlags.NonPublic | BindingFlags.Static);
Debug.Log($"handlerType: {eventInfo.EventHandlerType}\n" +
$"methodInfo: {methodInfo}");
Delegate del = Delegate.CreateDelegate(eventInfo.EventHandlerType, methodInfo);
eventInfo.AddMethod.Invoke(instance, new object[] {del});
}
private static void UpdateSubscribers<T2>() where T2 : IFieldUpdater{...}
}
//_AbstractSingleton creates an Instance of the First SubType of _FieldUpdater<T>
public abstract class _FieldUpdater<T> : _AbstractSingleton<_FieldUpdater<T>> where T : IFieldUpdater
{
protected internal abstract Type[] Types { get; }
public event Action OnFieldUpdate;
public delegate void Denis<T1>() where T1 : IFieldUpdater;
public event Denis<T> UpdateSubscribers;
}
事情是我完全不知道现在该做什么。 HELP ^^
答案 0 :(得分:0)
好吧,我明白了^^
我不得不将一个Type引入泛型methodInfo。
Delegate del = Delegate.CreateDelegate(eventInfo.EventHandlerType, methodInfo);
到
Delegate del = Delegate.CreateDelegate(eventInfo.EventHandlerType, methodInfo.MakeGenericMethod(eventInfo.EventHandlerType.GenericTypeArguments[0]));
如果我们知道如何在此标记中设置容器,那就太棒了。请在评论中告诉我,哈哈