Я смотрел на реализацию
Observable.FromEvent<TEventHandler, TEventHandlerArgs>(add, remove)
и я изо всех сил пытаюсь понять, как это работает. Позволяет сказать, что TEventHandler является стандартом:
public delegate void EventHandler(object sender, EventArgs e);
тогда меня озадачивает код:
TEventHandler d = (TEventHandler) Delegate.CreateDelegate(
typeof (TEventHandler),
(object) new Action<EventArgs>(observer.OnNext),
typeof (Action<EventArgs>).GetMethod("Invoke"));
(n.b Я специализировал этот общий код на этом конкретном экземпляре примера.)
Как создается CreateDelegate делегат подписи (obj, args), связанный с методом invoke (args) для действия? Где находится объект?
Похоже, что это может быть вокруг открытого делегата по действию, и мы принуждаем 'this' быть "firstArguemnt" из CreateDelegate и разрешать прохождение args. Если так кажется грязным?