A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈辉 中级黑马   /  2012-11-14 11:07  /  1389 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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代码来验证这一点(单击可以放大图片):



评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

1 个回复

倒序浏览
领教了,谢谢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马