delegate.Invoke是如何工作的?
如果我在我的代码中创建一个委托,如:
delegate void dostuff (string o);
这将生成一个派生自System.MulticastDelegate
的类,该类实现三个方法Invoke
, BeginInvoke
和EndInvoke
。
如果我查看已编译的IL for Invoke
我看到的是:
.method public hidebysig newslot virtual instance void Invoke(string o) runtime managed { } // end of method dostuff::Invoke
该方法不包含代码。 调用它确实有效 – 代理被调用,但我看不出它是如何做到的。
调用Invoke的伏都教在哪里实际调用委托来自哪里?
可以在签名结束时找到voodoo: runtime managed
。 请注意,您定义的所有托管类和方法都将被装饰为cli managed
。
runtime managed
意味着运行时提供方法的预优化实现。