什么是F#相当于C#"公共事件"

Ale*_* Yu 4 com events f# delegates c#-to-f#

我正试图从本文翻译成F#代码http://www.codeproject.com/Articles/35532/C-COM-Object-for-Use-In-JavaScript-HTML-Including

我偶然发现了这条线:

public delegate void MyFirstEventHandler(string args);
public event MyFirstEventHandler MyFirstEvent;
Run Code Online (Sandbox Code Playgroud)

我试图用F#翻译这个:

type MyFirstEventHandler = delegate of string -> unit
type MyFsComComponent () = 
    let my_event = new Event<MyFirstEventHandler,string> ()

    [<CLIEvent>]
    member x.MyFirstEvent = my_event.Publish
Run Code Online (Sandbox Code Playgroud)

我得到:'MyFirstEventHandler'有一个非标准的委托

我可以编译:

type MyFirstEventHandler = delegate of obj*string -> unit
Run Code Online (Sandbox Code Playgroud)

但这不是COM控制所需要的.

这个问题也在C#中提到了F#类过渡 - "公共事件"仍然没有解决方案

解决了.感谢Leaf Garland

type MyFirstEventHandler = delegate of string -> unit
type MyFsComComponent () =    
    let my_event = new DelegateEvent<MyFirstEventHandler> ()

    [<CLIEvent>]
    member x.MyFirstEvent = my_event.Publish
Run Code Online (Sandbox Code Playgroud)

诀窍.

Lea*_*and 5

F#事件类预期参数类型为通用参数,而不是委托类型.它还期望委托是标准类型(例如类似的东西obj*eventargs->unit).对于任意委托,请使用DelegateEvent.

type MyFirstEventHandler = delegate of string -> unit
type MyFsComComponent () = 
    let my_event = new DelegateEvent<MyFirstEventHandler>()

    [<CLIEvent>]
    member x.MyFirstEvent = my_event.Publish
Run Code Online (Sandbox Code Playgroud)