什么是F#等效于C#“public event” [英] What is F# equivalent of C# "public event "

查看:249
本文介绍了什么是F#等效于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


com / en-us / library / dd233189.aspx> 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


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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆