浅谈C#中的委托

在c++中被称为安全的函数指针,c#中叫做委托,简单理解就是把一个方法作为参数传到另一个方法中;

委托,是一个类静态( static Delegete),继承自multicaseDeletgete(多路广播委托),事实上它不是把一个方法中的方法体直接传到另一个方法中,而是把方法的指针放到了委托对象中,执行委托就执行了清单中的方法

1,定义一个委托:访问修饰符 void Delegete 委托对象名(参数列表)

一个方法要想放到委托对象中,就必须符合委托对象定义的格式.

每个委托对象中有两个主要的变量:Internal Intptr_method和一个obj类型的数组;

只有当第一次调用委托时,就把方法的指针放到  Internal Intptr_method中,构造函数调用委托对象的时候,执行此方法;

obj数组里放的就不是指针了,而是委托对象,当追加一个方法的时候,先把方法编译成一个委托对象,然后存放到这个数组中;

委托中关于+=和-=的问题:

+=是一种语法糖,编译成了combine方法,这个方法有两个参数,委托容器,和委托对象,功能就是把委托对象放到委托容器中,每次+=的时候都把方法放到委托容器中,返回值是一个Delegete类型,每次+=就把上次的委托类型对象覆盖掉,这时委托对象中的数组的长度是上次的长度+1,所以不用考虑这个数组的长度.

调用委托时:

简单的写法是直接写  委托变量();

其实这种写法在编译时编译成了委托变量的invoke方法.

posted @ 2012-10-07 19:58  老精灵  阅读(280)  评论(0)    收藏  举报