例如如果你写...
public delegate void MyTypedDel(int x)
Intellisense 显示 BeginInvoke、Invoke 和 EndInvoke 是 MyTypedDel 类型定义的一部分。
它们不是 Delegate 或 MulticastDelegate 类型定义的一部分。 (委托(delegate)有一个 DynamicInvoke 方法,它使用后期/运行时绑定(bind)来绑定(bind)到一个方法。)
所以我的问题是这些方法在哪里混合到类型化委托(delegate)类型定义中,它的实现是什么样的?我读到... Invoke 在同一线程上连续内部调用 BeginInvoke 和 EndInvoke。这是真的吗?
只是好奇这里的引擎盖下的魔法..也许我错过了一些非常明显的东西......在这种情况下是残酷的:)
最佳答案
编译器生成您的委托(delegate)类,它扩展了 Delegate
BCL 类并添加了特定于您的委托(delegate)签名的方法。您可以通过在反射器中查看您的委托(delegate)(或 BCL 委托(delegate))并切换到 IL View 来看到这一点(因为 C# 反汇编器足够智能,可以将其转回委托(delegate)声明)。示例:
.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
{
}
}
关于c# - 谁将 BeginInvoke、Invoke 和 EndInvoke 方法定义添加到类型化委托(delegate)中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/680828/