浅谈C#中的委托
在c++中被称为安全的函数指针,c#中叫做委托,简单理解就是把一个方法作为参数传到另一个方法中;
委托,是一个类静态( static Delegete),继承自multicaseDeletgete(多路广播委托),事实上它不是把一个方法中的方法体直接传到另一个方法中,而是把方法的指针放到了委托对象中,执行委托就执行了清单中的方法
1,定义一个委托:访问修饰符 void Delegete 委托对象名(参数列表)
一个方法要想放到委托对象中,就必须符合委托对象定义的格式.
每个委托对象中有两个主要的变量:Internal Intptr_method和一个obj类型的数组;
只有当第一次调用委托时,就把方法的指针放到 Internal Intptr_method中,构造函数调用委托对象的时候,执行此方法;
obj数组里放的就不是指针了,而是委托对象,当追加一个方法的时候,先把方法编译成一个委托对象,然后存放到这个数组中;
委托中关于+=和-=的问题:
+=是一种语法糖,编译成了combine方法,这个方法有两个参数,委托容器,和委托对象,功能就是把委托对象放到委托容器中,每次+=的时候都把方法放到委托容器中,返回值是一个Delegete类型,每次+=就把上次的委托类型对象覆盖掉,这时委托对象中的数组的长度是上次的长度+1,所以不用考虑这个数组的长度.
调用委托时:
简单的写法是直接写 委托变量();
其实这种写法在编译时编译成了委托变量的invoke方法.

浙公网安备 33010602011771号