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