F#中的事件和代表

Ali*_*Ali 6 .net c# f#

我没有F#的经验,但在C#中有几行测试代码用于我需要在F#中重写的框架.

任何帮助,将不胜感激.

    bar.Ready += new Agent.ReadyHandler(bar_Ready);               

    static void bar_Ready(string msg)
    {    
       Console.WriteLine(msg.body);  
    }
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 9

只是为了澄清 - 较短的版本应该是正确的:

bar.Ready.Add(fun msg -> System.Console.WriteLine(msg))  
Run Code Online (Sandbox Code Playgroud)

因为F#不会自动将lambda函数转换为委托 - 但是有一个带有函数的Add方法.然后可以更简单地编写这样的代码:

bar.Ready.Add(System.Console.WriteLine)  
Run Code Online (Sandbox Code Playgroud)

因为F#允许您使用.NET成员作为一等函数.


Mar*_*náš 6

试试这个 -

bar.Ready.AddHandler(new Agent.ReadyHandler (fun sender msg -> System.Console.WriteLine(msg)))
Run Code Online (Sandbox Code Playgroud)


Ali*_*Ali 4

我已经玩过很多次了,这就是有效的代码。

bar.add_Ready(fun msg -> Console.WriteLine(msg))
Run Code Online (Sandbox Code Playgroud)

我不知道它在理论上有多正确,但它工作得很好。

任何人都可以确认它是正确的吗?