C# 委托/事件本质详解
委托
一.什么是委托
IL层面
1>委托的本质就是一个类
2>继承自System.MulticastDelegate
3>委托里面内置了3个方法:Invoke(),BeginInvoke(),EndInvoke()
二.委托的三个步骤
1>public delegate void MyDelegate();//1.委托的声明
2>MyDelegate myDelegate = new MyDelegate(DoSomething);//2.委托的实例化(构造函数传方法)
3>myDelegate.Invoke();//3.实例调用(Invok调用),这里等于执行了这个方法
myDelegate();//3.直接调用也和上面一行代码是一样的
三.委托的3大意义
1>解耦:
-好处是减少重复代码;
-解耦是解除了判断逻辑和共用逻辑之间的耦合;
-委托传递的是逻辑(逻辑就是方法);
2>异步多线程
3>多播委托
-+=为委托实例按顺序增加方法,形成方法链,Invok()时按顺序执行
--=为委托实例移除方法,从方法链的尾部开始匹配,遇到第一个完全吻合的移除,且只移除一个;没有的也不异常
-多播委托带返回值,结果以最后的为准
-价值:一个变量保存多个方法,可以增减方法;Invok时候可顺序执行
事件
一.什么是事件
1>说白了,就是带event关键字的委托实例
2>事件可以限制变量外部调用,或者直接赋值
3>事件可以把一堆的动作或行为,封装出去,交给第三方指定
4>程序设计时候:
-固定部分,可以写死
-不固定部分,通过一个事件去开放接口,外部可以扩展动作
二.委托和事件的区别和联系
1>委托是一个类型,一个类,事件是委托的实例
2>比如委托时一个Student类,事件是“小明”实例
最新文章
- Go语言实战 - 使用SendCloud群发邮件
- Tomcat部署Solr4.10.4
- Linux常用命令1
- MySql中时间类型总结
- SQL Server 最小化日志操作解析,应用
- mysql中时间类型datetime,timestamp与int的区别
- GitHub的代码托管和使用方法
- elecworks 图框管理器
- HDU2024JAVA
- 初学Java ssh之Spring 第一篇
- 导入jsp
- java-6数组
- win10环境下利用pyinstaller把python代码(.py)打包成可执行文件(.exe)
- 深入解读阿里云数据库POLARDB核心功能物理复制技术
- socket架构
- ";tsc.exe";已退出,代码1
- Java网络编程的基本网络概念
- Python学习之解决python下载第三方依赖速度慢的问题
- 第16月底18天 phpstudy设置
- .NET Core开发日志——Controller
热门文章
- 逆向进阶,利用 AST 技术还原 JavaScript 混淆代码
- 石油储运生产 2D 可视化,组态应用赋能工业智慧发展
- 2.Docker安装
- Java高并发-多线程基础
- Kube-OVN v1.10.0:新增Windows节点支持,用户自定义子网ACL等10+硬核功能
- 04C++核心编程(二-泛型编程)
- 【Unity Shader】syntax error: unexpected token 'struct' at line x 错误解决办法
- Spring IOC源码研究笔记(2)——ApplicationContext系列
- Eureka高可用集群搭建
- Markdown常见基本语法