黑马程序员技术交流社区

标题: 委托揭秘 [打印本页]

作者: 陈辉    时间: 2012-11-14 11:07
标题: 委托揭秘
本帖最后由 chenhui 于 2012-11-14 11:09 编辑

我们经常会定义一个委托,在通过委托来回调方法,但其实委托其实是一个类,
1、源码:
namespace 委托
{
    public delegate void DlgShowMsg(string msg);

    class Program
    {
        static void Main(string[] args)
        {
            DlgShowMsg dlgShowMsg = Console.WriteLine;
            dlgShowMsg("你好,我是用委托实现的!");
            Console.ReadKey();
        }
    }
}

2、上述代码经编译后,编译器实际会将委托像下面这样定义一个完整的类:
internal class DlgShowMsg : System.MulticastDelegate
{
         //构造函数
         public DlgShowMsg(Object object, IntPtr method);
         
         public virtual void Invoke(string msg);

         //以下方法实现了对回调函数的异步调用
         public virtual IAsyncResult BeginInvoke(string msg,AsyncCallback callback,Object object);
         public virtual void EndInvoke(IAsyncResult  result);
}

3、下面通过IL代码来验证这一点(单击可以放大图片):




作者: 李洪伟    时间: 2012-11-14 17:08
领教了,谢谢。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2