【发布时间】:2013-12-23 16:52:56
【问题描述】:
我正在尝试通过以下方式注册从基类派生的泛型,但出现错误:
无法将
MyCallback<T>表达式转换为类型MyCallback<Event>
我希望这些限制能让这成为可能,但我错过了什么吗?
public class Event
{ };
public delegate void MyCallback<T>(T arg1) where T : Event;
static class EventDispatcher
{
public static Dictionary<string, MyCallback<Event>> eventTable = new Dictionary<string, MyCallback<Event>>();
static void RegisterCallback<T>(MyCallback<T> callback) where T : Event
{
eventTable.Add("test", callback);
}
}
【问题讨论】:
-
你为什么在这里使用泛型?使用 .NET 3.5 或更高版本时应该使用普通的多态性。
-
主要是为了强制正确的类型注册并允许更具体的委托处理。我想以编程方式约束 RegisterCallback
的调用者在其最终的回调委托中期望 T 类型的对象。这将允许我执行类似 RegisterCallback (MyFunction) 的操作,其中 MyFunction(ThisOddType objectIKnowAbout) -
@user3130210 您打算如何确保使用正确的参数调用回调?
标签: c# events generics types type-inference