[英]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.