例如,如果你写...
public delegate void MyTypedDel(int x)
Intellisense显示BeginInvoke,Invoke和EndInvoke是MyTypedDel类型定义的一部分.
它们不是Delegate或MulticastDelegate类型定义的一部分.(Delegate有一个DynamicInvoke方法,它使用后期/运行时绑定来绑定到方法.)
所以我的问题是这些方法混合到类型委托类型定义中的位置以及它的实现如何?我读到了...... Invoke在同一个线程上内部连续调用BeginInvoke和EndInvoke.这是真的?
只是好奇这里引人注目的魔术......也许我错过了一些真正明显的东西......在这种情况下是残酷的:)
编译器生成您的委托类,该类扩展了Delegate
BCL类并添加了特定于委托签名的方法.您可以通过查看反射器中的委托(或BCL委托)并切换到IL视图来看到这一点(因为C#反汇编程序非常智能,可以将其转回委托声明).例:
.class public auto ansi sealed WaitCallback extends System.MulticastDelegate { .custom instance void System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = { bool(true) } .method public hidebysig specialname rtspecialname instance void .ctor(object 'object', native int 'method') runtime managed { } .method public hidebysig newslot virtual instance class System.IAsyncResult BeginInvoke(object state, class System.AsyncCallback callback, object 'object') runtime managed { } .method public hidebysig newslot virtual instance void EndInvoke(class System.IAsyncResult result) runtime managed { } .method public hidebysig newslot virtual instance void Invoke(object state) runtime managed { } }