Мне было интересно, может ли метод расширения 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, и реализация интерфейсов должна выполняться методом расширения.
Если это невозможно, возможно ли явно определить Уведомление, а затем просто перенаправить вызов в метод расширения?
Приведенный выше код в основном является хаком множественного наследования. Можно ли подражать этому поведению любым (другим) способом?
(Надеюсь, это имеет смысл, я привык к Руби, и это доставляет мне действительно тяжелые времена. О, как я скучаю по тебе, мои дорогие миксины ...)
Обновление
Переадресация решена довольно хорошо:
public void Notify(SEvent ev)
{
ReflectiveEventDispatcher.Notify(this, ev,);
}