簡體   English   中英

如何在C#中定義F#中的事件

[英]How do define an event in F# visible from C#

看看各種文檔,在F#中定義事件的方法就是做類似的事情

type xyz () =
    let e = new Event<T>
    member x.something_happened : IEvent<T> = x.Publish

不幸的是,IEvent的類型實際上是Miscrosoft.FSharp.Control.IEvent <_>,因此很難在C#中使用。 有些文章建議將CLIEvent屬性添加到上面的成員something_happended中,但就C#的可用性而言,它似乎沒有任何區別,而不包括F#庫。

如何在F#中正確定義事件,以便我可以在C#代碼中添加一個委托? 非常感謝。

F#, Event<'T>Event<'Delegate, 'Args>有兩種事件類型。 [<CLIEvent>]存在時,只有第二個編譯為.NET事件。 這是一個有效的例子:

type T() =
    let e = Event<EventHandler<_>,_>()

    [<CLIEvent>]
    member x.MyEvent = e.Publish

    member x.RaiseMyEvent() = e.Trigger(x, EventArgs.Empty)

在某些情況下,如果[<CLIEvent>]與非標准事件類型一起使用,編譯器將生成警告。 我不確定為什么它不會對你的代碼發出警告(也許是一個錯誤?)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM