3

我正在尝试按照以下方式实现一些东西

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;
}
4

2 回答 2

4

您可以将泛型类型传递给参数.. 像这样:

class Receiver {
    public RegisterEvent<T>(T param);
} 

T参数列表中的 必须与调用中提供的类型相匹配。

编辑:重新阅读了这个问题..也许这实际上就是你的意思:

public delegate void CustomEventHandler<T>(T param);
public void RegisterEvent<T>(CustomEventHandler<T> eh) {

}

..同样的哲学。

于 2013-07-16T10:52:49.690 回答
0

看起来您需要 RegisterEvent 方法来获取通用委托:

delegate void EventHandlerDelegate< ClassType >( ClassType p );
class Receiver
{
    public RegisterEvent< T >( EventHandlerDelegate< T > callback );
}

这也意味着您的调用代码不需要显式提供“关闭”泛型方法的类型:

receiver.RegisterEvent( MyEventHandler );

它提出了一个问题,为什么你不只是使用事件......

于 2013-07-16T11:03:27.427 回答