F#中的IDelegateEvent和IEvent有什么区别?

Dan*_*iel 5 f#

文档说:

F#为与类型IDelegateEvent兼容的非虚拟实例成员属性提供特殊状态,生成适当的.NET元数据以使该成员作为.NET事件显示给其他.NET语言.

但是,无论有没有CLIEvent属性,IDelegateEvent和IEvent的行为都是相同的.

我正在使用1.9.7.8.

kvb*_*kvb 4

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

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