我想知道某个类的C#扩展方法是否可以作为接口的实现?
我有:
一个接口:
public interface IEventHandler
{
void Notify(SEvent ev, IEventEmmiter source);
}
一个实现它的类:
class Sim : IEventHandler
{
/*public void Notify(SEvent ev, IEventEmmiter source)
{
Console.WriteLine("Got notified: " + ev.Name);
}*/
}
一个包含扩展方法的类:
public static class ReflectiveEventDispatcher
{
public static void Notify(this IEventHandler handler, SEvent ev)
{
if (handler.GetType().GetMethod("Handle" + ev.Name) != null)
{
// C# WTF?
object[] prms = new object[0];
prms[0] = ev;
handler.GetType().GetMethod("Handle" + ev.Name).Invoke(handler, prms);
}
else
{
throw new System.NotImplementedException("This object doesn't have appropriate handler methods for event " + ev.Name);
}
}
}
现在,我希望有各种类与IEventHandler接口,并且这些接口的实现应该由扩展方法来完成。
如果不可能,那么是否可以显式定义Notify,然后只需将调用转发到扩展方法?
上面的代码基本上是多重继承的hack。是否有任何(其他)方法可以模拟此行为?
(我希望这讲得通,我习惯于Ruby,这真的让我很难受。哦,我是多么想念你,我的亲爱的mixins...)
更新
调用转发解决了它:
public void Notify(SEvent ev)
{
ReflectiveEventDispatcher.Notify(this, ev,);
}