黑马程序员技术交流社区
标题:
委托揭秘
[打印本页]
作者:
陈辉
时间:
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代码来验证这一点(单击可以放大图片):
委托揭秘.JPG
(183.21 KB, 下载次数: 31)
下载附件
2012-11-14 11:07 上传
作者:
李洪伟
时间:
2012-11-14 17:08
领教了,谢谢。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2