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)
诀窍.
在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)