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