当涉及到C#时,我有点菜鸟,这就是为什么我来找你们希望得到一些澄清。我有一个定义委托的 EventDispatcher 类:
delegate void EventHandler(BaseEvent evt);
以及一些使用它的方法:
void AddEventListener(string event_name, EventHandler handler)
void RemoveEventListener(string event_name, EventHandler handler = null)
void DispatchEvent(BaseEvent evt)
我还派生了事件类,例如从BaseEvent
继承并在顶部添加自己的属性/字段的 DerivedEvent
。
正如预期的那样,我会像这样使用它:
AddEventListener("my_event", MyEventHandler);
我的处理程序方法看起来像这样:
void MyEventHandler(BaseEvent evt)
最后,实际问题。为什么我不能定义一个使用派生事件类作为参数的处理程序,如下所示:
void MyEventHandler(DerivedEvent evt)
我甚至尝试过通过接口,但这没有区别。我目前正在方法主体内转换为实际的事件类:
...
DerivedEvent actualEvent = (DerivedEvent)evt;
...
这真的是唯一的方法吗?希望有人能启发我:)
当调用委托时,允许调用方传入任何BaseEvent
。 不一定是DerivedEvent
. 由于调用方可能传入的对象不是DerivedEvent
,因此您的处理程序不能假定传入的值是DerivedEvent
。
您可以做的是添加一个处理程序,该处理程序不仅可以接受任何BaseEvent
,还可以接受其他内容。 例如,您可以添加一个接受object
作为参数的处理程序,因为在调用处理程序时传入的任何BaseEvent
都将是object
。