您的位置:首页 > 其它

委托回调初识

2015-06-05 00:00 134 查看
我们知道定义一个委托之后,就可以像MyDelegate(3,7)这样回调方法,其实每一个委托对象都是一个类对象,每一个委托对象中都有一个Invoke的同步成员方法(查MSDN得知),系统实际调用的是MyDelegate.Invoke(3,7).那么Invoke的内部结构怎样的呢?当然MSDN上面肯定查不出来了,琢磨了一下,可以模仿一下的嘛!





Invoke的内部实现(伪代码)

1
sealed

class
MyDelegate:MultiCastDelegate
//
编译器为我们生成的类

2

{

3

public

int
Invoke(
int
x,
int
y)

4
{

5

int
result
=
0
;

6
Delegate[] delegates
=
this
.GetInvocationList();
//
获取委托列表(具体用法查看MSDN)

7

foreach
(Delegate dele
in
deledates)

8
{

9
result
=
dele.Method.Invoke(dele.Target,
new

object
[]{x,y});
//
Method、Target为Delegate类型中的成员,分别表示委托方法和方法所属对象,具体参考MSDN

10

}

11

return
result;
//
返回委托链中最后一个返回值

12

}

13
………………………………
//
还有其他成员

14

}

其中GetInvocationList返回Delegate类型数组,Method为一个System.Reflection.MethodInfo类型变量,Target为Object对象,具体参考MSDN。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: