因此,我有一个要在事件触发器上执行的函数,但我想稍后将其删除。我该怎么办?我知道F#事件具有Add方法,该方法添加了一个函数作为处理程序,但是您无法删除此函数。我明白,但我根本找不到如何创建任何委托(delegate)! (嗯,有type Foo = delegate of type1 -> type2,但是我不明白它的用法...)

编辑:这是我想在代码中做的更清晰的例子:

// Define and publish event
let _someEvent = new Event<string>()
let SomeEvent = someEvent.Publish

// Normally, I'd do this to use it:
SomeEvent.Add (fun arg -> printfn "Argument: %s" arg)

// Trigger the event
someEvent.Trigger "Hello world"

但是我的问题是我想在某个时候删除这个钩子(Hook)。我知道代表有可能……只是不确切地知道如何去做。

最佳答案

另一种选择是使用 Subscribe 方法并使用 Dispose 取消订阅:

// Define and publish event
let someEvent = new Event<string>()
let SomeEvent = someEvent.Publish

// Subscribe to event
let subscription =
    SomeEvent.Subscribe (fun arg -> printfn "Argument: %s" arg)

// Trigger the event
someEvent.Trigger "Hello world"

// Unsubscribe
subscription.Dispose()

关于.net - F# 删除函数处理程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14533489/

10-11 01:52