簡體   English   中英

如何為 F# 接口編寫事件成員?

[英]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# 選擇讓事情變得復雜。 希望有人能回答這個問題

關於原始設計的幾句話:建議所有事件都具有類型EventHandlerEventHandler<TEventArgs> ,不要使用自定義事件類型。 如果您擔心EventArgs內存分配,請使用EventArgs.Empty而不是new EventArgs()

暫無
暫無

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

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