4

在委托中如何调用静态方法似乎很简单,因为当调用委托本身时,它们的所有参数都将传递给它们。
但是,当将实例方法添加到委托时,在调用委托期间似乎忽略了“this”参数,因此我只能想象它与委托本身一起保存 - 类似于闭包可以对其他参数。

问:当实例方法传递给委托时,编译器是否会创建闭包,或者是否有不同的机制来完成?

4

2 回答 2

8

不。

该类Delegate有一个Target属性,该属性存储this调用方法时要传递的值。
换句话说,aDelegate实际上存储了两件事:一个函数指针和第一个参数的值。

包含目标的委托称为封闭委托,因为它关闭了第一个参数。

事实上,这就是闭包的工作方式。当编译器为委托创建闭包时,它将创建一个类来保存被关闭的变量,并将该类存储为委托的Target.

有关更多信息,请参阅我的博客文章:

于 2012-12-30T16:57:54.390 回答
2

看看(底层)Delegate 类。它定义了一个被称为Target定义实例的成员。如果是静态方法Target,则与类本身相关联。

于 2012-12-30T17:01:35.527 回答