2

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

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

查看WorkbookBase.NewSheet Event,类型为WorkbookEvents_NewSheetEventHandlerobj-> unit可以订阅,我'Args原以为obj它的 F# 类型是类型。

但是,我看到该事件NewSheet的类型IEvent<WorkbookEvents_NewSheetEventHandler, unit>

在此处输入图像描述 这有什么可以解释的?


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


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

类型:代表

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

注意:此约束形式的存在主要是为了允许定义与事件编程相关的某些 F# 库函数。它很少直接用于 F# 编程。

委托约束并不暗示任何关于子类型的内容。特别是,“委托”约束并不意味着该类型是 System.Delegate 的子类型。

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

4

1 回答 1

2

查看规范如何定义委托约束:objsender 参数是隐式的。

于 2013-10-15T18:44:42.043 回答