在委托,事件,处理程序,在F#

如果我看看Control.IEvent <'Delegate,'Args> ,它强加于'Args

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

查看WorkbookBase.NewSheet事件 ,types为obj-> unit WorkbookEvents_NewSheetEventHandler可以订阅,我会期望'Args在F#types中, 'Args的types为obj

但是,我看到事件NewSheetIEvent<WorkbookEvents_NewSheetEventHandler, unit>typesIEvent<WorkbookEvents_NewSheetEventHandler, unit>

在这里输入图像说明 什么可以解释这个?


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


5.2.8 委托约束一个显式的委托约束具有如下forms:

typar:代表

在约束求解(§14.5)期间,约束types:如果types是委托typesD,则声明typesD = 对象委托* arg1 * … * argN和tupled-arg-type = arg1 * … * argN。 也就是说,委托必须匹配发送者对象是事件的第一个参数的CLIdevise模式。

注意:这个约束表单的存在主要是为了定义某些与事件编程相关的F#库函数。 它很less直接在F#编程中使用。

委托约束并不意味着任何有关子types。 特别是,“委托”约束并不意味着该types是System.Delegate的子types。

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

看看规范如何定义委托约束: obj发件人参数是隐含的。