这一篇主要介绍委托的一些内部结构,想要了解委托的使用和功能可以看前一篇文章:.NET学习笔记(八) ——委托(上)
前天不小心感冒了,吃了药但还是晕晕的,还是继续写把。。。前面介绍了委托的功能和使用方法。委托实际是对一个函数指针的封装,那么他是如何指向一个函数,有是如何把多个方法都绑定起来的呢?
一 委托的内部结构
下面是简单的一个定义委托方法,写起来很简单,当编译器编译这句话的时候做了什么呢?
//申明一个委托要绑定的方法签名
public deletgate void ExampleDeletgate(int x);
通过ILDASM我们可以看到,系统产生了以下代码:
//构造器有2个参数为了方便后面使用,我重新定义这2个变量名字
//public ExamplDelegate(object target,int methodPtr)
.method public hidebysig specialname rtspecialname
instance void .ctor(object 'object', native int 'method') runtime managed
{
}
//下面两个是委托的一个异步回调用方法,我们暂时不关注他们
.method public hidebysig newslot virtual
instance class [mscorlib]System.IAsyncResult
BeginInvoke(int32 x,class [mscorlib]System.AsyncCallback callback,object 'object') runtime managed
{
}
.method public hidebysig newslot virtual
instance void EndInvoke(class [mscorlib]System.IAsyncResult result) runtime managed
{
}
//这个方法和委托指定的方法原形是一样的,我同样改写下
//public void virtual Invoke(int32 x);
.method public hidebysig virtual instance void Invoke(int32 x) runtime managed
{
}