[英]How to write an Event member for an F# interface?
我是 F# 的新手。 在 C# 中,我有一個接口定義為:
public interface IMenuEvents
{
event Action SaveEvent;
event EventHandler<ParagraphReadyEventArgs> ParagraphReadyEvent;
....
}
在哪里
public class ParagraphReadyEventArgs : System.EventArgs
{
public ParagraphReadyEventArgs(string paragraph_title)
{
ParagraphTitle = paragraph_title;
}
public string ParagraphTitle { get; }
}
接口 IMenuEvents 是如何用 F# 編寫的?
感謝您的任何幫助。
給定的聲明轉化為
open System
type ParagraphReadyEventArgs(paragraphTitle: string) =
inherit EventArgs()
member val ParagraphTitle = paragraphTitle
type IMenuEvents =
[<CLIEvent>]
abstract member SaveEvent : IDelegateEvent<EventHandler>
[<CLIEvent>]
abstract member ParagraphReadyEvent : IDelegateEvent<EventHandler<ParagraphReadyEventArgs>>
主要區別在於EventHandler
包裹在IDelegateEvent<T>
在幕后,您將獲得與 C# 相同的界面。 反編譯
我不明白為什么 F# 選擇讓事情變得復雜。 希望有人能回答這個問題
關於原始設計的幾句話:建議所有事件都具有類型EventHandler
或EventHandler<TEventArgs>
,不要使用自定義事件類型。 如果您擔心EventArgs
內存分配,請使用EventArgs.Empty
而不是new EventArgs()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.