【发布时间】:2011-09-26 11:34:15
【问题描述】:
我在反射、泛型、事件处理程序和委托方面苦苦挣扎。我有一个派生自 AsyncCompletedEventArgs 的类型。我想用这个类型和一个委托创建一个通用的 EventHandler 实例。之后我想将此事件处理程序添加到事件中。
谁能帮助我使用反射创建事件处理程序和委托?感谢所有帮助。
// The type is derived from AsyncCompletedEventArgs
Type[] typeArgs = { soapServiceInfo.GetEntitiesCompletedEventArgsType };
var eventHandlerType = typeof(EventHandler<>);
var constructed = eventHandlerType.MakeGenericType(typeArgs);
// getEntitiesCompleted = (sender, arguments) => { }
// soapServiceInfo.GetEntitiesCompletedEventInfo.AddEventHandler(client, getEntitiesCompleted);
【问题讨论】:
-
你想让代理做什么?
-
能否提供 AddEventHandler() 的签名?是 (object,AsyncCompletedEventArgs) 还是 (object,T) ?
-
签名是 (object, T) 其中 T : AsyncCompletedEventArgs。我一直在尝试调用 CreateDelegate,但在从 lambda 函数获取 MethodInfo 时遇到问题。 GetEntitiesCompletedEventInfo 是一个 EventInfo 对象。
标签: c# generics reflection delegates event-handling