在委托中调用静态方法似乎很简单,因为在调用委托本身时,它们的所有参数都将传递给它们。
但是,当一个实例方法被添加到委托时,'this'参数在调用委托期间似乎被忽略了,所以我只能想象它与委托本身一起保存 - 类似于一个闭包可以用于其他参数。
问:当实例方法传递给委托时,编译器是否会创建闭包,或者是否有不同的机制来完成此操作?
答案 0 :(得分:7)
没有
Delegate
类具有Target
属性,用于存储调用方法时要传递的this
值。
换句话说,Delegate
实际存储两个事物:函数指针和第一个参数的值。
包含目标的委托称为已关闭委托,因为它会关闭第一个参数。
实际上,这实际上就是闭包的工作方式。当编译器为委托创建闭包时,它将创建一个包含已关闭的变量的类,并将该类存储为委托的Target
。
有关详细信息,请参阅我的博文:
答案 1 :(得分:2)
查看(底层)Delegate类。它定义了一个名为Target
的成员,用于定义实例。如果是静态方法Target
与类本身相关联。