我正在努力实现这样的目标
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
since Dispatch
正在采取IMyEventHandler
而不是IEventHandler
。我不想让MyEvent.Dispatch
take a IEventHandler
然后将其投射到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;
}
谢谢,汤姆
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)