当前位置:  开发笔记 > 编程语言 > 正文

谁将BeginInvoke,Invoke和EndInvoke方法定义添加到类型委托?

如何解决《谁将BeginInvoke,Invoke和EndInvoke方法定义添加到类型委托?》经验,为你挑选了1个好方法。

例如,如果你写...
public delegate void MyTypedDel(int x)
Intellisense显示BeginInvoke,Invoke和EndInvoke是MyTypedDel类型定义的一部分.
它们不是Delegate或MulticastDelegate类型定义的一部分.(Delegate有一个DynamicInvoke方法,它使用后期/运行时绑定来绑定到方法.)

所以我的问题是这些方法混合到类型委托类型定义中的位置以及它的实现如何?我读到了...... Invoke在同一个线程上内部连续调用BeginInvoke和EndInvoke.这是真的?

只是好奇这里引人注目的魔术......也许我错过了一些真正明显的东西......在这种情况下是残酷的:)



1> Kent Boogaar..:

编译器生成您的委托类,该类扩展了DelegateBCL类并添加了特定于委托签名的方法.您可以通过查看反射器中的委托(或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
    {
    }

}

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有