c# - 对强类型事件处理程序使用泛型?

标签 c# templates generics types parameters

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

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) {

}

..虽然相同的理念。

关于c# - 对强类型事件处理程序使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17674630/

相关文章:

c# - Azure VM 上的双向 SSL 证书交换

c++ - 使用透明 std 函数对象时,我们还需要写空尖括号吗?

java - 子类型 "inherit"通用接口(interface)是否使用该特定子类型 (Java) 进行参数化?

java - 如何在运行时获取对象类型?

c# - 如何通过 wpf 中的行和列获取网格子项?

c# - 为什么在将可空类型转换为 Roslyn 中的基类时没有转换?

c# - 如何正确将 JSON 写入事件中心

c++ - 继承自 std::ostringstream

c++ - 模板定义如何与模板声明匹配?

java - 使用 Class<?> 作为键创建 ImmutableMap 的问题