通俗来讲,委托就是吩咐别人去做某件事,但不知道他具体会怎么做。使用委托必须注意的一个问题是内存泄露问题:假如委托实例本身不能被回收,委托实例会阻止他的目标被作为垃圾回收。尤其是假如某“短命”的对象调用了一个“长命”的对象中的事件,并用其自身作为目标。“长命”对象间接容纳了对“短命”对象的引用,延长了“短命”对象的寿命。下面是一个只为委托而委托的例子:

delegate void StringProgressor(string input);          //声明委托类型
    class Person
    {
        string name;
        public Person(string name) { this.name = name; }
        public void Say(string message)              //声明兼容的实例方法
        {
            Console.WriteLine("{0} says {1}",name,message);
        }
    }
    class Background
    {
        public static void Note(string note)            //声明兼容的静态方法
        {
            Console.WriteLine("({0})",note);
        }
    }
    class Program
    {
        static void Main()
        {
            Person jon = new Person("Jon");
            Person tom = new Person("Tom");
            StringProgressor jonsVoice, tomsVoice, background;//创建三个委托实例
            jonsVoice = new StringProgressor(jon.Say);
            tomsVoice = new StringProgressor(tom.Say);
            background = new StringProgressor(Background.Note);

jonsVoice("Hello son.");               //隐式调用委托实例
            tomsVoice.Invoke("Hello Daddy");          //显式调用委托实例
            background("An airplane flies past");
            Console.ReadKey();
        }
    }

  委托的实质是间接完成某种操作,这样做增大了代码的复杂性,但提高了代码的灵活性。在真正使用时,委托实例实际上有一个操作列表与之关联,称为委托实例的调用列表。其中Combine(+=)和Remove(-=)负责添加和删除。在委托实例被调用时,所有操作都按顺序执行,如果其有一个非void的返回值,则Invoke的返回值是最后一个操作返回值,假如有一个操作抛出异常,则后面的操作都会被停止。

c# in deep 之委托的更多相关文章

  1. 【C#】委托的发展

    "用事件去处理程序, 进而解决问题" ---- 委托的目的 委托早在C#2的时候就已经初具模型, 但是并不是特别灵活, 制止C#3才在代码中被广泛使用. C#4中泛型委托, C#5 ...

  2. 深度自适应增量学习(Incremental Learning Through Deep Adaptation)

    深度自适应增量学习(Incremental Learning Through Deep Adaptation) 2018-05-25 18:56:00 木呆呆瓶子 阅读数 10564  收藏 更多 分 ...

  3. Rainbow: Combining Improvements in Deep Reinforcement Learning

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1710.02298v1 [cs.AI] 6 Oct 2017 (AAAI 2018) Abstract 深度强化学习社区对D ...

  4. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

  5. C#基础篇 - 理解委托和事件

    1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...

  6. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  7. [C#] C# 知识回顾 - 委托 delegate

    C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...

  8. 9、委托、事件、Lambda

    开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.)   第 ...

  9. iOS 委托与文本输入(内容根据iOS编程编写)

    文本框(UITextField) 本章节继续编辑 JXHypnoNerd .文件地址 . 首先我们继续编辑  JXHypnosisViewController.m 修改  loadView 方法,向  ...

随机推荐

  1. 安德鲁斯 建立与各种听众自己定义的ScrollView

    === 建立与各种听众自己定义的ScrollView === 尽管安卓5.1已经release, 可是ScrollView的封装和对外API依然少的可怜, 尽管它优化得非常好了. 所以问题来了: Sc ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2) ...

  3. 使用Mockito进行单元测试【1】——mock and verify[转]

    本文转自:http://qiuguo0205.iteye.com/blog/1443344 1. 为什么使用Mockito来进行单元测试? 回答这个问题需要回答两个方面,第一个是为什么使用mock?m ...

  4. hdu Color the ball

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 树状数组的  update的应用,逆序更新 代码: #include <stdio.h&g ...

  5. 为代码减负之&lt;一&gt;触发器(SQL)

    对触发器一词早有耳闻(最早是在耿大妈的数据库视频中),当初看完视频后,对理解不深刻的东西如:触发器,存储过程,事务,日志等等没有具体的去查阅,也没有具体的去尝试,应用.所以才导致了今天的博客(把曾经丢 ...

  6. java_log4j----java 日志管理

    log4j 有三个主要组件: 类别Loggers------消息类型和优先级 附加目的地Appenders-------在哪里报告消息 布局Layouts------控制如何格式化消息 这三个组件共同 ...

  7. INF 右安装驱动程序和卸载

    INF 右键安装驱动以及卸载 之前写过一篇文章是关于INF文件具体解释的.大家能够參看INF文件具体解释,这次写的是关于INF右键安装,这样比較方便. 卸载的话也是一句话.能够大大降低安装时间: 先将 ...

  8. 动态类(Dynamic)应用

    动态类(Dynamic)应用 背景: 在Coding中有时候会遇到一些需要解析的数据,可是数据的字段数量和名称未统一,我们没法定义实体类来对应.那么我们就会想到通过C#的dynamic动态类来实现,如 ...

  9. Quartz使用-入门使用(java定时任务实现)

    注:这里使用的是Quartz1.6.5版本号(包:quartz-1.6.5.jar) //測试main函数 //QuartzTest.java package quartzPackage; impor ...

  10. MyEclipse 设置全部jsp的编码为UFT-8 的方法