什么是F#等效于C#“public event” [英] What is F# equivalent of C# "public event "
问题描述
我想从这篇文章翻译为F#代码 http://www.codeproject.com/Articles/35532/C-COM-Object-for-Use-In-JavaScript-HTML-包括
我偶然发现了这一行:
public委托void MyFirstEventHandler(string args);
public event MyFirstEventHandler MyFirstEvent;
我试图在F#中翻译为:
type MyFirstEventHandler = delegate of string - >单元
类型MyFsComComponent()=
let my_event = new Event< MyFirstEventHandler,string> ()
[< CLIEvent>]
member x.MyFirstEvent = my_event.Publish
我得到:'MyFirstEventHandler'有一个非标准的委托
我可以编译:
type MyFirstEventHandler = delegate of obj * string - >单位
但这不是COM控制中需要的。
此问题也出现在 F#类作弊页中 - public event仍然没有解决方案
已解决。感谢Leaf Garland
type MyFirstEventHandler = delegate of string - >单元
类型MyFsComComponent()=
let my_event = new DelegateEvent< MyFirstEventHandler> ()
[< CLIEvent>]
member x.MyFirstEvent = my_event.Publish
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
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
I've stumbled on this lines:
public delegate void MyFirstEventHandler(string args);
public event MyFirstEventHandler MyFirstEvent;
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
And I get: 'MyFirstEventHandler' has a non-standard delegate
I can compile with:
type MyFirstEventHandler = delegate of obj*string -> unit
But this is not what needed in COM-control.
This question is also raised in F# classes cheat sheet - "public event" still did not have solution
SOLVED. Thanks to Leaf Garland
type MyFirstEventHandler = delegate of string -> unit
type MyFsComComponent () =
let my_event = new DelegateEvent<MyFirstEventHandler> ()
[<CLIEvent>]
member x.MyFirstEvent = my_event.Publish
does the trick.
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#“public event”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!