私はこのようなことを達成しようとしています
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
IMyEventHandler
IEventHandler
MyEvent.Dispatch
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;
}
ありがとう、トム