[英]Using generics for strongly typed event handlers?
我正在努力实现某些方面
class Receiver {
public RegisterEvent<T>(???);
}
class EventTypeClass {
...
}
class MyApp
{
public MyApp()
{
RegisterEvent<EventTypeClass>(MyEventHandler);
}
void MyEventHandler(EventTypeClass param)
{
// Handle event of type 'EventTypeClass'
}
}
我不知道如何将强类型事件处理程序作为参数传递,或者它是否可能,或者我被迫使用类似的东西
void MyEventHandler(object param)
{
var castedParam = param as EventTypeClass;
}
你可以将泛型类型传递给参数..像这样:
class Receiver {
public RegisterEvent<T>(T param);
}
参数列表中的T
必须与调用中提供的类型匹配。
编辑:重新阅读问题..也许这实际上是你的意思:
public delegate void CustomEventHandler<T>(T param);
public void RegisterEvent<T>(CustomEventHandler<T> eh) {
}
同样的哲学。
看起来您需要RegisterEvent方法来获取泛型委托:
delegate void EventHandlerDelegate< ClassType >( ClassType p );
class Receiver
{
public RegisterEvent< T >( EventHandlerDelegate< T > callback );
}
这也意味着您的调用代码无需显式提供“关闭”泛型方法的类型:
receiver.RegisterEvent( MyEventHandler );
它提出了为什么你不仅仅是使用事件的问题......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.