什么是委托?
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. ElasticSearch 7.1.1 集群环境搭建

    1. 集群简介 三台机器,均用于保存数据且可被选为master节点 服务版本 服务 版本 elasticsearch 7.1.1 jdk 1.8 1. 创建elsearch用户 不建议直接使用root ...

  2. Codeforces Gym101246J:Buoys(三分搜索)

    http://codeforces.com/gym/101246/problem/J 题意:给出n个点坐标,要使这些点间距相同的话,就要移动这些点,问最少的需要的移动距离是多少,并输出移动后的坐标. ...

  3. 探寻 webpack_bundle_analyzer 原理

    webpack_bundle_analyzer 是什么? 这是webpack官方出品的,对项目中模块依赖关系及体积的分析插件,其界面如下: 问题来了,这是如何来进行统计的? 这里提供一个插件的代码,可 ...

  4. springboot自动装配(2)---实现一个自定义自动装配组件

    对于springboot个人认为它就是整合了各种组件,然后提供对应的自动装配和启动器(starter),基于这个流程去实现一个定义的装配组件 还是这张图 一.创建自己的自动配置工程, spring.f ...

  5. 从壹开始[ 做贡献 ]之三 || 北京.Net俱乐部活动——DNT精英论坛开幕

    缘起 哈喽大家好!好久不见,可能有一部分小伙伴发现我好久没有写文章了,是不是懒惰了,并没有,这两周也是正式开始了<NetCore系列教程的视频录制>,不过还不多,预计会是每周一个视频,基本 ...

  6. [ZJOI2006]物流运输 题解

    [ZJOI2006]物流运输 时间限制: 10 Sec  内存限制: 162 MB 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个 ...

  7. Socket编程:listen()函数英文翻译

    作者:C语言达人 链接:https://zhuanlan.zhihu.com/p/24951131 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本篇翻译的list ...

  8. 学习2:总结# 1.while # 2.字符串格式化 # 3.运算符 # 4.编码初始

    目录 1.while循环 -- 死循环 2.字符串格式化: 3.运算符 4.编码 1.while循环 -- 死循环 while 条件: 循环体 打断死循环: break -- 终止当前循环 改变条件 ...

  9. 【题解】旅行-C++

    Description 某趟列车的最大载客容量为V人,沿途共有n个停靠站,其中始发站为第1站,终点站为第n站.在第1站至第n-1站之 间,共有m个团队申请购票搭乘,若规定:(1)对于某个团队的购票申请 ...

  10. HAproxy+Keepalived实现高可用

    HAproxy+Keepalived实现高可用 说明: HA1:HAproxy+Keepalived(master) HA2:HAproxy+Keepalived(backup) 1.HA1上keep ...