Метод расширения C # как реализация интерфейса

Мне было интересно, может ли метод расширения 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, а затем просто перенаправить вызов методу расширения?

Приведенный выше код в основном представляет собой взлом множественного наследования. Можно ли имитировать это поведение какими-либо (другими) средствами?

(Надеюсь, это имеет смысл, я привык к Ruby, и это доставляет мне большие трудности. О, как я скучаю по вам, мои дорогие миксины ...)

Обновление

Переадресация звонков решила эту проблему очень хорошо:

public void Notify(SEvent ev)
{
    ReflectiveEventDispatcher.Notify(this, ev,);
}
44
задан Tim Pohlmann 26 July 2018 в 08:26
поделиться