在委托(delegate)中调用静态方法似乎很简单,因为它们的所有参数都将在调用委托(delegate)本身时传递给它们。
但是,当将实例方法添加到委托(delegate)时,“this”参数在委托(delegate)调用期间似乎被忽略了,因此我只能想象它与委托(delegate)本身一起保存——类似于闭包可以对其他对象执行的操作参数。
问:当实例方法被传递给委托(delegate)时,编译器是否会创建一个闭包,或者是否有不同的机制来完成?
最佳答案
没有。
Delegate
类有一个 Target
属性,它存储 this
的值以在调用方法时传递。
换句话说,Delegate
实际上存储了两个 东西:一个函数指针和第一个参数的值。
包含目标的委托(delegate)称为封闭委托(delegate),因为它关闭第一个参数。
事实上,这就是闭包的工作原理。当编译器为委托(delegate)创建闭包时,它会创建一个类来保存被关闭的变量,并将该类存储为委托(delegate)的Target
。
有关详细信息,请参阅我的博客文章:
关于c# - 实例方法如何转换为委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14092572/