什么是委托?
1.委托是C#中由用户自定义的一个类型。
2.类表示的是数据和方法的集合,而委托实际上是一个能持有对某个或某些方法的引用的类。
3.与其他的类不同,委托类能拥有一个签名,并且他只能持有与他的签名相匹配的方法的引用。

如何使用委托
1.声明一个委托类型。
2.使用一个委托类型声明一个委托变量。
3.创建委托类型的对象,把它赋值给委托变量。该委托对象包含某个方法的引用,这个方法和第一步定义的签名一致。
4.为委托对象增加其他方法。
5.像方法一样调用委托。此时,委托持有的每一个方法都会依次执行。

声明委托
public delegate void TestDelegate(int num);

1.声明委托的语法与定义方法的语法类似,但没有方法体,声明的前面加关键字delegate。

2.声明委托相当于声明了一个新类,所以可以在任何声明类的相同地方声明委托。

3.可以在委托的声明上应用任何常见的访问修饰符,如public,private等。

创建委托对象
方式1:使用带new运算符的对象创建表达式。
TestDelegate td1 = new TestDelegate(TestMethod);
方式2:使用方法名直接创建
TestDelegate td1 = TestMethod;
方法名可以来自任何类和结构,可以是实例方法,也可以是静态方法,方法签名必须和委托的签名一致。

组合委托
添加:
A = B + C;
A += B;
移除:
A-= B;
如果委托为空之后调用会报空指针,如果添加两个相同的委托,移除委托从列表的结尾移除查找的到的第一个,如果移除的委托不存在,不会报错。

带返回值的委托调用
多个方法加减,只有最后一个方法的返回值起作用。如果需要总体生效需要声明参数为ref。
调用列表中最后一个方法的返回值就是委托调用最终的返回值。
调用列表中其他所有方法的返回值都会被忽略(覆盖)。
委托签名中的参数列表不为空时,需要区分该参数是值类型还是引用类型。若为引用类型参数,该参数的值可能会根据调用列表中的一个和多个方法而发生改变。

多播委托
持有多个方法的引用的委托,称为多播委托。
在调用多播委托时,如果调用列表中的某一个方法抛出异常,整个迭代就会停止,该方法之后的所有方法将不会被调用。
Delegate类的GetInvocationList()方法,返回一个Delegate对象数组,该数组中的每个元素都是一个委托对象,该对象持有原多播委托调用列表中的一个方法。
delegate(int num) {
//方法体
};

C#的委托事件总结的更多相关文章

  1. C#反射调用其它DLL的委托事件 传值

    C#反射调用其它DLL的委托事件 传值在插件式开发.我们要调用其它插件或模块的委托事件时.那么我们需要通过反射. 复制代码namespace Module2{ /// <summary> ...

  2. Jquery的普通事件和on的委托事件

    以click的事件为例: 普通的绑定事件:$('.btn').click(function(){})绑定 on绑定事件:$(documnet).on('click','btn2',function() ...

  3. Jquery的普通事件和on的委托事件小案例

    以click的事件为例: 普通的绑定事件:$('.btn').click(function(){})绑定 on绑定事件:$(document).on('click','.btn2',function( ...

  4. C#中的委托事件的分析

    推荐:http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html 委托和事件在 .NET Framework 中的应用非常广泛,然而, ...

  5. 【翻译】Ext JS 5的委托事件和手势

    原文:Delegated Events and Gestures in Ext JS 5 简介 Ext JS在5之前的版本,被设计为专用于传统鼠标输入的桌面设备使用.而从5开始,添加了对触屏输入的支持 ...

  6. xlua修复C#的委托事件的时候,需要提前做好配置

    如下所示: //C#静态调用Lua的配置(包括事件的原型),仅可以配delegate,interface [CSharpCallLua] public static List<Type> ...

  7. js的委托事件----Vue

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. js动态添加事件-事件委托

    作者:白狼 出处:http://www.manks.top/javascript-dynamic-event.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

  9. 解密jQuery事件核心 - 委托设计(二)

    第一篇 http://www.cnblogs.com/aaronjs/p/3444874.html 从上章就能得出几个信息: 事件信息都存储在数据缓存中 对于没有特殊事件特有监听方法和普通事件都用ad ...

随机推荐

  1. jquery Easy UI Datagrid(数据网格)学习心德,附API

    第一步,引入主要的css样式和js文件 <meta http-equiv="Content-Type" content="text/html; charset=ut ...

  2. iOS自动化探索(十)代码覆盖率统计

    iOS APP代码覆盖率统计 今年Q3季度领导给加了个任务要做前后端代码覆盖率统计, 鉴于对iOS代码代码比较熟就选择先从iOS端入手,折腾一整天后终于初步把流程跑通了记录如下 覆盖率监测的原理 Xc ...

  3. 为什么QQ能上却打不开网页呢?

    互联网是一个复杂又有趣的玩意儿,接下来我来分享一个案例: 网页打不开,但奇怪的是QQ可以正常使用??? 网页打不开的原因:电脑上Tcp/IP设置中没有使用自动分配的DNS服务器,而且自行设定的DNS服 ...

  4. Linux命令学习-cp命令

    Linux中,cp命令的全称是copy,主要作用是复制文件或文件夹,类似于Windows下的复制功能. 假设当前处于wintest用户的主目录,路径为 /home/wintest ,存在文件夹test ...

  5. Java第二次作业——数组和String类

    Java第二次作业--数组和String类 学习总结 1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法.举例说明equals方法和==的区别 ...

  6. [奇思异想]使用RabbitMQ实现定时任务

    背景 工作中经常会有定时任务的需求,常见的做法可以使用Timer.Quartz.Hangfire等组件,这次想尝试下新的思路,使用RabbitMQ死信队列的机制来实现定时任务,同时帮助再次了解Rabb ...

  7. Docker笔记(五):整一个自己的镜像

    原文地址:http://blog.jboost.cn/2019/07/17/docerk-5.html 获取镜像的途径有两个,一是从镜像仓库获取,如官方的Docker Hub,二是自定义.上文已经介绍 ...

  8. Centos7 下nginx 搭建文件图片服务器

    现在服务器部署nginx yum install -y epel-release yum install nginx -y 安装完成之后 访问ip 由此可见nginx服务是可用的 修改nginx的配置 ...

  9. javascript之正则表达式(一)

    正则表达式:定义一套规则,检查字符串的用的.换句话说,就是记录文本规则的代码.适用于进行文字匹配工具,例如:(1)测试字符串的某个模式(2)替换文本(3)根据模式匹配从字符串中提取一个子字符串.语法: ...

  10. UVA-10608 Friends 【并查集】

    There is a town with N citizens. It is known that some pairs of people are friends. According to the ...