文档章节

委托回调初识

IT周见智
 IT周见智
发布于 2015/06/05 17:18
字数 274
阅读 7
收藏 0

我们知道定义一个委托之后,就可以像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。

© 著作权归作者所有

共有 人打赏支持
IT周见智

IT周见智

粉丝 10
博文 61
码字总数 185891
作品 0
西青
私信 提问
IOS 委托和协议区别和联系 (=)

上一片大致说了一下IOS上面委托和协议的区别和联系,并且举了一个简单的例子,但是例子比较简单,今天做一个用委托模拟button回调的例子。 在一个自定义View上面放一个登陆按钮,并且这个Log...

malawo
2013/08/08
0
0
Android实现Fragment跨Activity回调通信

个人喜欢复杂东西简单化,这里就不做理论性描述,实现这方法当然很多,比如可以使用广播,实现Activity回调再调用Fragment等,这里是直接Activity回调到Fragment 效果流程图 2.实现流程 2.1 ...

chenyy1203
2018/06/28
0
0
event 和delegate的分别

突然想起delegate委托是支持+= 和-=操作的,然后研究一下究竟这个是怎么做到的,好模仿一下。一开始以为是+=的运算符重载,但是在类库参考中并没有这个运算符重载,只有!= 和==运算符重载。有...

诺贝尔
2018/08/22
0
0
​ IOS 委托和协议区别和联系 (=)

IOS 委托和协议区别和联系 (=) 上一片大致说了一下IOS上面委托和协议的区别和联系,并且举了一个简单的例子,但是例子比较简单,今天做一个用委托模拟button回调的例子。 在一个自定义Vie...

法斗斗
2015/10/13
42
0
C#学习笔记——回调机制

1.什么是回调函数 回调函数(callbackFunction),顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。 2.C#回调函数实现机制 ⑴定义一个回...

zting科技
2017/01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 世界的源代码

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @小鱼丁 :#今日歌曲推荐# 分享Jason Mraz的单曲《Prettiest Friend (Demo)》: 《Prettiest Friend (Demo)》- Jason Mraz 手机党少年们想听歌...

小小编辑
今天
59
5
java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
今天
10
0
Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
今天
6
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部