关于F#中的委托,事件,偶然事件

时间:2013-10-15 18:07:47

标签: excel events f# constraints

如果我查看Control.IEvent<'Delegate,'Args>,则会'Args强加

IEvent<'Delegate,'Args when 'Delegate : delegate<'Args,unit>...>

查看WorkbookBase.NewSheet Event obj-> unit类型'Args可订阅的WorkbookEvents_NewSheetEventHandler,我希望obj的类型为NewSheet F#型。

但是,我发现事件IEvent<WorkbookEvents_NewSheetEventHandler, unit>的类型为{{1}}

enter image description here 什么可以解释这个?


添加答案中提到的规范摘录:


5.2.8 委托约束 显式委托约束具有以下形式:

typar:delegate

在约束求解(第14.5节)期间,如果type是委托类型D,声明类型为D = 对象* 委托,arg1 * ... * argN和tupled,则约束类型:委托得到满足-arg-type = arg1 * ... * argN。也就是说,委托必须匹配CLI设计模式,其中sender对象是事件的第一个参数。

注意:此约束表单主要用于允许定义与事件编程相关的某些F#库函数。它很少直接用于F#编程。

委托约束并不意味着有关子类型的任何内容。特别是,'委托'约束并不意味着该类型是System.Delegate的子类型。

委托约束仅适用于遵循CLI事件处理程序的常用形式的委托类型,其中第一个参数是“sender”对象。原因是约束的目的是简化CLI事件处理程序到F#程序员的表示。

1 个答案:

答案 0 :(得分:2)

查看how the spec defines委托约束:obj sender参数是隐式的。