在委托,事件,处理程序,在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
。
但是,我看到事件NewSheet
是IEvent<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
发件人参数是隐含的。