什么是F#等效的C#“公共事件” [英] What is F# equivalent of C# "public event "
问题描述
我正在尝试从这篇文章翻译成F#代码 http://www.codeproject.com/Articles/35532/C-COM-Object-for-Use-In-JavaScript-HTML-包含
I'm trying to translate to F# code from this article 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;
我已经尝试在F#中翻译:
I've tried to translate this in F# as:
type MyFirstEventHandler = delegate of string -> unit
type MyFsComComponent () =
let my_event = new Event<MyFirstEventHandler,string> ()
[<CLIEvent>]
member x.MyFirstEvent = my_event.Publish
我得到:'MyFirstEventHandler'有一个非标准委托
我可以用:
type MyFirstEventHandler = delegate of obj*string -> unit
但这不是COM控件中需要的。
But this is not what needed in COM-control.
此问题也在 C#到F#类转换中引发 - 公共事件仍然没有解决方案
This question is also raised in C# to F# class transition - "public event" still did not have solution
SOLVED。感谢Leaf Garland
type MyFirstEventHandler = delegate of string -> unit
type MyFsComComponent () =
let my_event = new DelegateEvent<MyFirstEventHandler> ()
[<CLIEvent>]
member x.MyFirstEvent = my_event.Publish
做的伎俩。
推荐答案
F#事件类期望参数类型作为通用参数,而不是委托类型。它也期望代表是一种标准类型(例如像 obj * eventargs-> unit
)。对于任意代理使用DelegateEvent。
The F# Event class expects the argument types as generic parameters, not the delegate type. It also expects that the delegate is a standard type (e.g. something like obj*eventargs->unit
). For arbitrary delegates use DelegateEvent.
type MyFirstEventHandler = delegate of string -> unit
type MyFsComComponent () =
let my_event = new DelegateEvent<MyFirstEventHandler>()
[<CLIEvent>]
member x.MyFirstEvent = my_event.Publish
这篇关于什么是F#等效的C#“公共事件”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!