Dot-Net
F# 刪除函式處理程序
所以,我有一個想要在事件觸發器上執行的函式,但我想稍後將其刪除。我該怎麼做?我知道 F# 事件具有
Add將函式添加為處理程序的方法,但您不能刪除此函式。我明白,但我根本找不到如何創建任何委託!(嗯,有*,*但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"但我的問題是我想在某個時候刪除這個鉤子。我知道它可能與代表……只是不知道該怎麼做。
另一種選擇是使用訂閱方法並使用 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()
是的,只需使用處理程序。
// Define and publish event let _someEvent = new Event<string>() let SomeEvent = _someEvent.Publish // wrap function in handler let handler = Handler<string>(fun _ arg -> printfn "Argument: %s" arg) // add SomeEvent.AddHandler handler // remove SomeEvent.RemoveHandler handler