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 ...
随机推荐
- 用户点击获取验证码之后我们会发送一条信息到用户手机,然后就会出现一个倒计时按钮,很像支付宝手机付款效果了,下面我给大家分享两个js效果
js代码 代码如下 复制代码 <div class="input"> <input type="button" id="bt ...
- 不使用 ASR 将虚机还原到另一个数据中心
背景 在 Azure 上可能会遇到一个场景是将一台虚机搬到另一台数据中心,在不借助 ASR 的情况下我们该如何做? 因为 ASR 在云上更多的场景是用于灾备到异地.对于虚机的相关信息主要的是磁盘和网络 ...
- 花5分钟时间来了解一下高性能网关Kong会有意外收获
前言 前几天开源发布了 Kong.Net 项目,收到了大量园友的反馈,开源当天就突破了 100 个star ,可喜可贺,但是从侧面也说明,我们 .NetCore 阵营真的非常需要拥抱开源,应该敞开心扉 ...
- git简介 http://msysgit.github.io/
集中式vs分布式 Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央服务 ...
- 关于网页授权access_token和普通access_token的区别
关于网页授权access_token和普通access_token的区别 1.微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授 ...
- Disruptor 详解 二
Disruptor 的大名从很久以前就听说了,但是一直没有时间:看完以后才发现其内部的思想异常清晰,很容易就能前移到其他的项目,所以仔细了解一下还是很有必要的这.篇博客将主要从源码角度分析,Disru ...
- 硬件笔记之Thinkpad T470P更换2K屏幕
0x00 前言 手上的Thinkpad T470P屏幕是1920x1080的屏幕,色域范围NTSC 45%,作为一块办公用屏是正常配置,但是考虑到色彩显示和色域范围,计划升级到2K屏幕. 2k屏幕参数 ...
- QQ Music 音乐插件DFX unable to open skin configration 的解决方法
设置 C:\Program Files (x86)\Tencent\QQMusic\Plugins\Dfx\dfx_skin.txt 它的权限 允许程序读取执行
- ElasticSearch01--安装ElasticSearch服务(Linux)
在linux系统上安装ElasticSearch服务 Linux系统要求: 1.centos6或centos7 2.jdk1.8及以上 1. 新建用户 新建一个用户 useradd yuank 修改用 ...
- javascript之正则表达式(二)
js正则贪婪模式与非贪婪模式 类似于贪吃蛇游戏,越吃越长.而贪婪模式就是尽可能多的匹配. 默认是贪婪模式 (尽可能多的匹配) 例子: va ...