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