如何在F#中创建与.NET兼容的事件?

问题描述:

我想从F#类型发布事件,但我希望它被视为来自C#或VB的事件。看来正确的方法是IEvent.create_HandlerEvent,但是这个函数并不存在于最新版本的F#中。那么现在做什么是正确的方法呢?如何在F#中创建与.NET兼容的事件?

事件是不是我的专长,但这个例子似乎在F#1.9.6.16工作:

namespace EventExample 
open System 
type MyEventArgs(msg:string) = 
    inherit EventArgs() 
    member this.Message = msg 

type MyEventDelegate = delegate of obj * MyEventArgs -> unit 

type Foo() = 
    let ev = new Event<MyEventDelegate, MyEventArgs>() 

    member this.Ping(msg) = 
     ev.Trigger(this, new MyEventArgs(msg)) 

    [<CLIEvent>] 
    member this.GotPinged = ev.Publish 

参见

http://cs.hubfs.net/forums/thread/10555.aspx

+0

谢谢,它的工作原理:)请问如何做你知道CLIEventAttribute?我没有在文档/语言规范/谷歌的任何地方看到它...... – 2009-05-24 18:33:40