using System; namespace ET { public interface IEvent { Type Type { get; } } public abstract class BEvent<A>: IEvent { public Type Type { get { return typeof(A); } } protected abstract ETTask OnEvent(A a); public async ETTask Handle(A a) { await OnEvent(a); } } }