我正在尝试实现这样的目标
public abstract class BaseEvent
{
public abstract void Dispatch(IEventHandler handler);
}
public class MyEvent : BaseEvent
{
public override void Dispatch(IMyEventHandler handler)
{
handler.OnMyEvent(this);
}
}
public interface IEventHandler
{
}
public interface IMyEventHandler : IEventHandler
{
void OnMyEvent(MyEvent e);
}
问题是编译器抱怨说MyEvent
没有实现BaseEvent
,因为Dispatch
它使用的是 anIMyEventHandler
而不是IEventHandler
. 我不想让MyEvent.Dispatch
aIEventHandler
然后将其转换为 a IMyEventHandler
,因为我希望编译时检查以确保我没有做一些愚蠢的事情,比如传入一些其他类型的事件处理程序。我找到了一个可能的解决方案(如下),但我想知道是否有更好的方法来做到这一点。
public abstract class BaseEvent<H> where H : IEventHandler
{
public abstract void Dispatch(H handler);
}
public class MyFirstEvent<H> : BaseEvent<H> where H : IMyFirstEventHandler
{
public override void Dispatch(H handler)
{
handler.OnMyFirstEvent(this);
}
}
public interface IEventHandler
{
}
public interface IMyFirstEventHandler : IEventHandler
{
void OnMyFirstEvent<H>(MyFirstEvent<H> e) where H : IMyFirstEventHandler;
}
谢谢,汤姆