繁体   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