C#的委托事件总结
什么是委托?
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#的委托事件总结的更多相关文章
- C#反射调用其它DLL的委托事件 传值
C#反射调用其它DLL的委托事件 传值在插件式开发.我们要调用其它插件或模块的委托事件时.那么我们需要通过反射. 复制代码namespace Module2{ /// <summary> ...
- Jquery的普通事件和on的委托事件
以click的事件为例: 普通的绑定事件:$('.btn').click(function(){})绑定 on绑定事件:$(documnet).on('click','btn2',function() ...
- Jquery的普通事件和on的委托事件小案例
以click的事件为例: 普通的绑定事件:$('.btn').click(function(){})绑定 on绑定事件:$(document).on('click','.btn2',function( ...
- C#中的委托事件的分析
推荐:http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html 委托和事件在 .NET Framework 中的应用非常广泛,然而, ...
- 【翻译】Ext JS 5的委托事件和手势
原文:Delegated Events and Gestures in Ext JS 5 简介 Ext JS在5之前的版本,被设计为专用于传统鼠标输入的桌面设备使用.而从5开始,添加了对触屏输入的支持 ...
- xlua修复C#的委托事件的时候,需要提前做好配置
如下所示: //C#静态调用Lua的配置(包括事件的原型),仅可以配delegate,interface [CSharpCallLua] public static List<Type> ...
- js的委托事件----Vue
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js动态添加事件-事件委托
作者:白狼 出处:http://www.manks.top/javascript-dynamic-event.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
- 解密jQuery事件核心 - 委托设计(二)
第一篇 http://www.cnblogs.com/aaronjs/p/3444874.html 从上章就能得出几个信息: 事件信息都存储在数据缓存中 对于没有特殊事件特有监听方法和普通事件都用ad ...
随机推荐
- Ceph原理动画演示
动图生动刻画Ceph的基本原理之集群搭建及数据写入流程:)
- django启动入口源码分析
manage.py是启动入口,在里面调用execute_from_command_line(sys.argv)方法 def execute_from_command_line(argv=None): ...
- 精通并发与 Netty (二)常用的 rpc 框架
Google Protobuf 使用方式分析 对于 RPC 协议来说,最重要的就是对象的发送与接收,这就要用到序列化与反序列化,也称为编码和解码,序列化与反序列化和网络传输一般都在对应的 RPC 框架 ...
- POJ 2887:Big String(分块)
http://poj.org/problem?id=2887 题意:给出一个字符串,还有n个询问,第一种询问是给出一个位置p和字符c,要在位置p的前面插入c(如果p超过字符串长度,自动插在最后),第二 ...
- scrapy实战3利用fiddler对手机app进行抓包爬虫图片下载(重写ImagesPipeline):
关于fiddler的使用方法参考(http://jingyan.baidu.com/article/03b2f78c7b6bb05ea237aed2.html) 本案例爬取斗鱼 app 先利用fidd ...
- java三大集合遍历
1. 场景描述 今天需要用到map集合遍历,一下子忘记咋写了,以前一般用map.get()直接获取值,很少遍历map,刚好总结下java中常用的几个集合-map,set,list遍历. 2. 解决方案 ...
- 单元测试jest部署
引入jest需安装的基础插件: 基础插件 @babel/core 编译工具核心模块包 @babel/preset-env 编译工具,支持es2015特性的编译打包工具包 babel-jest 对.js ...
- 【并查集】模板 + 【HDU 1213、HDU 1232、POJ 2236、POJ 1703】例题详解
不想看模板,想直接看题目的请戳下面目录: 目录: HDU 1213 How Many Tables[传送门] HDU 1232 畅通工程 [传送门] POJ 2236 Wireless Network ...
- HelloDjango 启动!免费带你学Django全栈!
欢迎 追梦 入伙 HelloGitHub-Team,同时为我们带来了完全免费的 HelloDjango 系列教程,全网首发于 HelloGitHub 公众号.让想你的系列文章被跟多人看到,那就来加入我 ...
- MyBatis框架之SQL映射和动态SQL
使用MyBatis实现条件查询 1.SQL映射文件: MyBatis真正的强大之处就在于SQL映射语句,MyBatis专注于SQL,对于开发人员来说也是极大限度的进行SQL调优,以保证性能.下面是SQ ...