如果我查看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}}
什么可以解释这个?
添加答案中提到的规范摘录:
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#程序员的表示。