delegate void DL(int i);
上面是一个委托的定义,委托向外提供了一种回调函数的机制,在.net中的委托是类型安全的,一个委托能实现对一类方法的回调,这个统一是通过委托的参数和返回值来实现的。
上面代码如果用IL来解释,是这个样子
如果用C#来表示,一个委托就成了下面的代码
  class DL:System .MulticastDelegate
   {
       public DL(Object object,IntPtr method);
       public virtual void Invoke(Int32 i);
       public virtual IAsyncResult BeginInvoke(Int32 i,AsyncCallback callback,Object object);
       public virtual void EndInvoke(IAsyncResult result);    
   }
当然,上面代码是通不过编译的,只是对应IL代码的表现。
在上面的类中,有一个构造函数,和三个方法,同时还有三个继承至MulticastDelegate的三个非公有字段_target,_methodPtr,_invocationList。
在构造函数中有两个参数,第一个是object类型,这里指的是被回调方法的对象,如果该方法是静态的,那么这个值就是null,第二个参数是个IntPtr,这个参数是回调方法。并且在构造器中,会把object赋给_target,IntPtr赋给_methodPtr来保存。
另外一个字段_invocationList是一个存放回调方法的链表。
static void Main(string[] args)
        {
            Program p = new Program();
            DL dl = new DL(p.FF);
            dl += p.FF;
            dl += FF1;
            dl(1);
        }
        public static void FF1(int i)
        {
            Console.WriteLine("d");
        }
        public void FF(int i)
        {
            Console.WriteLine(DateTime .Now .ToString ());
        }
上面代码的+=的过程,其实就是向_invocationList添加委托的过程。
还有代码中,我们调用了dl(1),这个代码其实是dl.Invoke(1)。
后两个方法的使用,可参看[url]http://www.cnblogs.com/axzxs2001/archive/2008/04/17/1157269.html[/url]。

.net知识和学习方法系列(二十)CLR-委托相关推荐

  1. .net知识和学习方法系列(十五)类型,对象,堆栈和托管堆

    1.          类型,对象,堆栈和托管堆 C#的类型和对象在应用计算机内存时,大体用到两种内存,一个叫堆栈,另一个叫托管堆,下面我们用直角长方形来代表堆栈,用圆角长方形来代表托管堆.   首先 ...

  2. .net知识和学习方法系列(十四)TraceListener的应用

    在前一往上一往篇文章中,我们用到一个TextWriterTraceListener,它是为监视跟踪和调试输出的侦听器,对于跟踪调试的监听器还有两个,分别是:DefaultTraceListener和E ...

  3. 数据与广告系列二十六:知识迁移的Embedding应用,智能化定向的解药

    作者·黄崇远 『数据虫巢』 全文共4348字 题图ssyer.com " 效果广告后定向时代,虽有千般万难,我们一样还得解决定向智能的问题." 需要提前说明的是,这一篇会涉及到本系 ...

  4. 自然语言处理系列二十二》词性标注》词性标注原理》词性介绍

    注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书<分布式机器学习实战>(人工智能科学与技术丛书)[陈敬雷编著][清华大学出版社] 文章目录 自然语言处理系列二十二 词性 ...

  5. 数据与广告系列二十二:智能化投放中扩量场景的技术实现策略

    作者·黄崇远 公众号 『数据虫巢』 全文8968字 题图ssyer.com " 人不够,系统给你凑." 这个系列上一篇<数据与广告系列二十一:关于品牌广告,奔涌吧后浪> ...

  6. Reflex WMS入门系列二十五:将叉车纳入系统进行管理

    Reflex WMS入门系列二十五:将叉车纳入系统进行管理 据笔者所知,SAP WM 模块里是不对仓库里常用的叉车等仓库管理工具进行管理的.笔者发现,Reflex WMS系统则会在很多仓库部门日常操作 ...

  7. Reflex WMS入门系列二十二:物料库存报表

    Reflex WMS入门系列二十二:物料库存报表 在Reflex WMS系统上,我们可以通过物料号查询它的HD列表,或者IPG列表.通过在其HD/IPG信息得知其库存数据.当然还可以通过如下方式直接获 ...

  8. 数据与广告系列二十四:效果广告后定向时代如何逆流而上

    作者·黄崇远 『数据虫巢』 全文共4338字 题图ssyer.com " 在效果广告的发展历程中,当前已经处于后定向时代,或者说是弱定向时代,我们是应该顺应潮流还是应该逆流而上?" ...

  9. Reflex WMS入门系列二十六:合并托盘

    Reflex WMS入门系列二十六:合并托盘 仓库管理业务实践中,对于仓库里的库存,将几个零托合并成一个托,也是比较常见的作业.Reflex WMS系统自然要能支持这种合并托盘(Merge HDs)的 ...

  10. Reflex WMS入门系列二十八:空白标签打印

    Reflex WMS入门系列二十八:空白标签打印 贴在托盘上的标签,因托盘上的货物的移动,使用等缘故可能会导致标签丢失.在很多场景下又需要扫描托盘标签,所以Reflex WMS系统提供了打印空白标签的 ...

最新文章

  1. FPGA的设计艺术(11)FPGA的构建过程
  2. Linux文本界面设置网络,fedora17下通过文本界面配置网络
  3. 【Java面试题】提取不重复的整数
  4. win10下 Ubuntu 18.04 LTS 的安装及 rlt8821ce网卡驱动的安装
  5. %hd %d %ld %u ......
  6. WAS 报错 Font '宋体' is not available to the JVM
  7. linux系统调用函数---12
  8. BlackBerry Key2 键盘扩展
  9. Spring源码分析之lazy-init属性的配置
  10. Linux 命令(127)—— wget 命令
  11. 2021-08-17 String to Integet atoi, ratate list
  12. NHibernate N+1问题实例分析和优化
  13. R语言处理非线性回归模型C-D方程,【译文】R语言非线性回归入门
  14. http://www.bluecoat.com.cn/resources/overview
  15. B站喷子脚本,bilibili喷人
  16. 【车载音乐】数10G车载音乐包,MP3高品质无损音乐素材合集
  17. [Vue warn] Extraneous non-emits event listeners (createSuccess) were passed to component but could
  18. MOD09A1数据下载与预处理-地表干湿度指数的计算
  19. PTA 6-2 根据派生类写出基类(Java)
  20. 计算机财务管理第五版第四章课后答案,计算机财务管理习题精简版

热门文章

  1. Rx:4-[编外篇] .NET4里的Concurrent Collections
  2. 复旦大学在职MBA项目2011年度学费调整通知
  3. Linux Shell脚本入门教程系列之(四)Shell注释
  4. RBF的一维和二维逼近
  5. Nginx 反向代理解决跨域问题
  6. 《剑指Offer》 二进制中1的个数
  7. django-前端上传图片190912
  8. python-format格式化专题介绍1909
  9. django-带签名的cookie
  10. linux-文件的查找-find