我正在尝试按照
的方式实施某些内容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;
}
答案 0 :(得分:4)
你可以将泛型类型传递给参数..就像这样:
class Receiver {
public RegisterEvent<T>(T param);
}
参数列表中的T
必须与呼叫中提供的类型匹配。
编辑:重新阅读了这个问题......也许这就是你的意思:
public delegate void CustomEventHandler<T>(T param);
public void RegisterEvent<T>(CustomEventHandler<T> eh) {
}
..同样的哲学。
答案 1 :(得分:0)
看起来你需要RegisterEvent方法来获取泛型委托:
delegate void EventHandlerDelegate< ClassType >( ClassType p );
class Receiver
{
public RegisterEvent< T >( EventHandlerDelegate< T > callback );
}
这也意味着您的调用代码无需显式提供“关闭”泛型方法的类型:
receiver.RegisterEvent( MyEventHandler );
它提出了一个问题,即你为什么不只是使用事件......