7

阅读有关在 f# 中创建新事件的代码我遇到了两个调用 event.Publish 和 event.Trigger,但我不太确定它们的含义。你能向我解释一下他们是做什么的吗?

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

由于我是意大利人,在这种情况下使用的“观察”一词对我没有任何好处。

4

2 回答 2

7

实现公开事件的新 F# 类型时的典型模式是将事件值创建为本地字段,使用event.Trigger代码中的某处触发事件,并使用以下方式将其公开给您类型的用户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

已发布成员的CLIEvent属性是可选的,但最好了解它。它表示该成员将被编译为 .NET 事件(而 C# 将其视为event)。如果您不添加它,那么 F# 会将其公开为类型的成员IEvent(这对于 F# 使用来说很好)。

于 2013-04-10T12:14:37.873 回答
4

这里解释得很好。

简而言之,可以想event.Publish成是暴露事件的一种方式,让客户端可以通过调用Add函数来订阅。event.Trigger引发实际事件。

于 2013-04-10T02:57:46.123 回答