繁体   English   中英

使用泛型用于强类型事件处理程序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM