Bad*_*Bad 2 c# reactive-programming system.reactive observable
签署这样的签名的目的是什么Observable.FromEvent?对于例如:
var appActivated = Observable.FromEvent(
h => Application.Current.Activated += h,
h => Application.Current.Activated -= h);
Run Code Online (Sandbox Code Playgroud)
特别是什么h?为什么+=,然后-=?我们Observable从事件或事件处理程序制作?如果从事件,为什么不只是有一个签名,如:
var appActivated = Observable.FromEvent(Application.Current.Activated);
Run Code Online (Sandbox Code Playgroud)
那是因为没有办法将事件作为参数传递给方法.您可以将该事件作为委托传递,但这不会使您能够订阅/取消订阅该事件.请参阅Eric Lippert的回答.
Observable.From 基本上说"好吧,我会给你一个可观察到的事件包装,但你需要给我两个代表:1)代表让我订阅我的处理程序参加活动,2)代表我在需要时取消订阅我的处理程序".
所以在这种情况下h => Application.Current.Activated += h是一个lambda表达式,它被编译成一个委托.h(handler)是输入参数,委托获取该输入参数并将其记录到Activated事件中.第二个委托是相同的,除了它取消订阅处理程序.