delegate.Invoke是如何工作的?

如果我在我的代码中创建一个委托,如:

delegate void dostuff (string o); 

这将生成一个派生自System.MulticastDelegate的类,该类实现三个方法InvokeBeginInvokeEndInvoke

如果我查看已编译的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意味着运行时提供方法的预优化实现。