一、什么是委托

委托和类一样,是一种用户自定义类型;

类表示的是数据和方法的集合,而委托则持有一个或多个方法;

二、委托的使用

1.声明委托类型

委托是类型,与类一样,委托类型必须在被用来创建变量以及类型的对象之前声明;

注意:

以delegate关键字开头;

没有方法主体;

2.创建委托对象

委托是引用类型,因此有引用和对象;

方式一:使用带new运算符的对象创建表达式

方式二:快捷方式,方法名称和其相应的委托类型之间存在隐式转换

3.给委托赋值

由于委托是引用类型,通过赋值来改变包含在委托变量中的引用。旧的委托对象就会被垃圾回收器回收

4.组合委托

注意:

委托是恒定的,委托对象被创建后就不能再被改变

5.为委托添加方法

注意:为委托添加方法的结果,

其实由于委托类型是不可变的,所有为委托的调用列表添加了3个方法后的结果其实是变量指向了一个全新的委托

6.从委托移除方法

注意:

如果调用列表中的方法有多个实例,-=运算符将从列表最后开始搜索,并移除第一个与方法匹配的实例;

试图删除委托中不存在的方法没有效果;

试图删除空委托会抛出异常。我们可以通过委托和null进行比较来判断委托的调用列表是否为空。如果调用列表为空,则委托为null

7.调用委托

可以像调用方法一样调用委托

注意:

使用参数调用委托就会使用相同的参数值调用它的调用列表中的每一个成员;

如果一个方法在调用列表中出现多次,当委托调用时,每次在列表中遇到这个方法时它都会被调用一次

7.调用带返回值的委托

分析

注意:

调用列表中的最后一个方法返回的值就是委托调用返回的值;

调用列表中所有其他方法的返回值都会被忽略

8.调用带引用参数的委托

注意:

如果委托有引用参数,参数值会根据调用列表中的一个或多个方法的返回值而改变;

在调用委托列表中的下一个方法时,参数的新值会传给下一个方法;

C#知识点-委托的更多相关文章

  1. 8.C#知识点:委托和事件

    知识点目录==========>传送门 首先推荐两篇大牛写的委托和事件的博客,写的超级好!看了就包你看会,想学习的朋友直接看这两篇就足以,我自己写的是算是自己学习的纪录. 传送门======== ...

  2. C# 关于委托的小例子

    本例子是一个关于委托的小例子[猫叫,狗跳,人喊]. 委托是C#开发中一个非常重要的概念,理解起来也和常规的方法不同,但一旦理解清楚,就可以信手拈来,随处可用. 委托是对方法的抽象.它存储的就是一系列具 ...

  3. 接口参数校验(不使用hibernate-validator,规避大量if else)

    引言 编写接口时,常用的参数校验使用hibernate-validator注解+@@Validated注解进行参数校验.当遇到一些特殊场景或需求,需要自己对参数进行手动校验时,会出现以下问题: 不可避 ...

  4. [ASP.NET MVC 大牛之路]02 - C#高级知识点概要(1) - 委托和事件

    在ASP.NET MVC 小牛之路系列中,前面用了一篇文章提了一下C#的一些知识点.照此,ASP.NET MVC 大牛之路系列也先给大家普及一下C#.NET中的高级知识点.每个知识点不太会过于详细,但 ...

  5. C#一些知识点:委托和事件的区别

    在C#中,委托和事件是比较容易混淆的两个知识点,本篇博客就记录一下委托和事件之间的区别. 定义上的区别 委托:委托实际上是一个类,用来表示一个函数,可以理解为C++中的函数指针. 事件:事件是一个修饰 ...

  6. [ASP.NET 大牛之路]02 - C#高级知识点概要(1) - 委托和事件

    在ASP.NET MVC 小牛之路系列中,前面用了一篇文章提了一下C#的一些知识点.照此,ASP.NET MVC 大牛之路系列也先给大家普及一下C#.NET中的高级知识点.每个知识点不太会过于详细,但 ...

  7. C#高级知识点概要(1) - 委托和事件

    本文目录: 委托 委托的简单使用 用委托实现插件式编程 多播委托 静态方法和实例方法对于委托的区别 泛型委托 Func 和 Action 委托 委托的兼容 事件 事件的基本使用 事件的标准模式 委托 ...

  8. C# 委托 、事件、同步、异步知识点归纳

    一.委托 基本用法: 1.声明一个委托类型.委托就像是‘类'一样,声明了一种委托之后就可以创建多个具有此种特征的委托.(特征,指的是返回值.参数类型) public delegate void Som ...

  9. C#知识点:委托、事件、正则表达式、SVN、找按段等差递增至不变序列的规律

    using System; using System.Collections.Generic; using System.Text; namespace Delegate { //定义委托,它定义了可 ...

随机推荐

  1. percona5.7 源码安装

    200 ? "200px" : this.width)!important;} --> 介绍 主要为了测试percona的线程池的性能,这里就简单介绍一下percona5.7 ...

  2. [ASP.NET MVC 大牛之路]03 - C#高级知识点概要(2) - 线程和并发

    本人博客已转移至:http://www.exblr.com/liam  我也想过跳过C#高级知识点概要直接讲MVC,但经过前思后想,还是觉得有必要讲的.我希望通过自己的经验给大家一些指引,带着大家一起 ...

  3. 谁占了我的端口 for Windows

    这篇文章发布于我的 github 博客:原文 今天在本地调试 Blog 的时候意外的出现了一些错误:127.0.0.1 4000 端口已经被其他的进程占用了.如何找到占用端口的进程呢? Configu ...

  4. PHP的pcntl多进程

    PHP使用PCNTL系列的函数也能做到多进程处理一个事务.比如我需要从数据库中获取80w条的数据,再做一系列后续的处理,这个时候,用单进程?你可以等到明年今天了...所以应该使用pcntl函数了. 假 ...

  5. PHP运行及语句及逻辑

    php开发网页需要存放在wamp根目录下的www文件夹中才可运行成功.同时wamp要处于运行状态.  无站点情况下打开方式:  网址栏中输入:localhost/文件名称 代码规范: 用 <?p ...

  6. 2013 duilib入门简明教程 -- 完整的自绘标题栏(8)

        看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题栏吧~     看到下面这个效果图,小伙伴们是不是有点惊呆了呢~O(∩_∩)O~       dui ...

  7. C#并行编程系列-文章导航

    菜鸟初步学习,不对的地方请大神指教,参考<C#并行编程高级教程.pdf> 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C# ...

  8. 设计与开发一款简单易用的Web报表工具(支持常用关系数据及hadoop、hbase等)

    EasyReport是一个简单易用的Web报表工具(支持Hadoop,HBase及各种关系型数据库),它的主要功能是把SQL语句查询出的行列结构转换成HTML表格(Table),并支持表格的跨行(Ro ...

  9. 路由转发过程的IP及MAC地址变化

    A-----(B1-B2)-----(C1-C2)-------E就假设拓扑图是这个样子吧,B1和B2是路由器B上的两个接口,C1和C2是路由器C上的两个接口,A和E是PC,由主机A向主机E发送数据包 ...

  10. AngularJS表单验证实现方法详解

    本文主要是通过源码实例和大家分享AngularJS中的表单验证相关知识,希望通过本文的分享,对大家学习AngularJS有所帮助. 1.常规表单验证: 2.AngularJs中提供的表单验证实例. 实 ...