Event.Trigger Event.Publish f#

时间:2013-04-10 02:45:41

标签: .net events f#

在f#中读取有关创建新事件的代码我遇到了两个调用event.Publish和event.Trigger,但我不太清楚它们的含义。你能告诉我他们做了什么吗?

请考虑手册中的内容: event.Publish将观察结果作为第一类值发布。 event.Trigger使用给定的参数触发观察。

由于我是意大利语,因此在这种情况下使用的“观察”一词对我没有任何帮助。

2 个答案:

答案 0 :(得分:4)

实现公开事件的新F#类型时的典型模式是将事件值创建为本地字段,使用代码中某处的event.Trigger触发事件,并使用{将其公开给您的类型的用户{1}}:

trigger.Publish

已发布成员的type Counter() = // Create the `Event` object that represents our event let event = new Event<_>() let mutable count = 0 member x.Increment() = count <- count + 1 if count > 100 then // Trigger the event when count goes over 100. To keep the sample // simple, we pass 'count' to the listeners of the event. event.Trigger(count) // Expose the event so that the users of our type can register event handlers [<CLIEvent>] member x.LimitReached = event.Publish 属性是可选的,但了解它是很好的。它表示该成员将被编译为.NET事件(并且C#将其视为CLIEvent)。如果你不添加它,那么F#只是作为event类型的成员公开它(这对于F#使用是好的。)

答案 1 :(得分:2)

很好地解释了here

简而言之,将event.Publish视为公开事件的一种方式,以便客户可以通过调用Add函数进行订阅。 event.Trigger提出了实际的事件。