阅读有关在 f# 中创建新事件的代码我遇到了两个调用 event.Publish 和 event.Trigger,但我不太确定它们的含义。你能向我解释一下他们是做什么的吗?
请注意手册中的内容:
event.Publish
将观察结果作为第一类值发布。
event.Trigger
使用给定参数触发观察。
由于我是意大利人,在这种情况下使用的“观察”一词对我没有任何好处。
实现公开事件的新 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# 使用来说很好)。
这里解释得很好。
简而言之,可以想event.Publish
成是暴露事件的一种方式,让客户端可以通过调用Add
函数来订阅。event.Trigger
引发实际事件。