如何将实例方法转换为委托?

时间:2012-12-30 16:55:44

标签: c# .net delegates closures

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

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

2 个答案:

答案 0 :(得分:7)

没有

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

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

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

有关详细信息,请参阅我的博文:

答案 1 :(得分:2)

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