委托回调初识
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。
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。
相关文章推荐
- .Net开发笔记(五) 关于事件
- Understand Lambda Expressions in 3 minutes(翻译)
- .Net WInform开发笔记(二)Winform程序运行结构图
- 函数式编程(一) 认识“编程范式”和“函数”
- 软件设计原则与模式
- 编程之基础:数据类型(一)
- 函数式编程(2) 高阶函数
- .Net开发笔记(十一) 设计时(Design-Time)和运行时(Run-Time)的区别
- .net开发笔记(十二) 设计时与运行时的区别(续)
- .Net开发笔记(八) 动态编译
- 线段与多边形关系的算法
- Why MVC is Better?(翻译)
- 谈系统骨架的建立——公司第四次交流会内容
- .NET中使用APlayer组件自制播放器
- 动力之源:代码中的“泵”
- WebForms VS. MVC(翻译)
- 谷歌百度翻译器
- .NET中异常处理的最佳实践(译)
- 关于新书出版的一些想法
- .Net Winform 开发笔记(四) 透过现象看本质