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

Ugh*_*ent 4 .net c# delegates closures

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

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

SLa*_*aks 7

没有.

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

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

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

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