如何为 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# 可以获得的相同界面。 Decompilation
我不明白为什么 F# 选择让事情变得如此复杂。希望有人能回答这个问题
关于原始设计的几句话:建议所有事件的类型为EventHandler
或EventHandler<TEventArgs>
,不要使用自定义事件类型。如果您担心 EventArgs
的内存分配,请使用 EventArgs.Empty
而不是 new EventArgs()
我是 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# 可以获得的相同界面。 Decompilation
我不明白为什么 F# 选择让事情变得如此复杂。希望有人能回答这个问题
关于原始设计的几句话:建议所有事件的类型为EventHandler
或EventHandler<TEventArgs>
,不要使用自定义事件类型。如果您担心 EventArgs
的内存分配,请使用 EventArgs.Empty
而不是 new EventArgs()