文档说:

F#为与IDelegateEvent类型兼容的非虚拟实例成员属性赋予特殊状态,从而生成适当的.NET元数据以使该成员作为.NET事件出现在其他.NET语言中。

但是,无论是否带有CLIEvent属性,IDelegateEvent和IEvent的行为似乎都是相同的。

我正在使用1.9.7.8。

最佳答案

IEvent继承自IDelegateEvent,但对允许的委托(delegate)类型施加了附加约束(强制其返回单位)。 IEvent也继承自IObservable。除非您想要一个具有奇怪类型的事件,否则没有理由依赖基本的IDelegateEvent接口(interface)而不是更常见的IEvent。

当您说[<CLIEvent>]没有任何作用时,您是什么意思?在FSI中,有一个错误会阻止在类型上正确生成事件(例如,通过Type.GetEvents()查看),但是在编译代码时会正确生成事件。即使是FSI,您也应该在应用[<CLIEvent>]属性时看到add_和remove_方法正在生成。

10-07 13:15
查看更多