对C#中事件的简单理解
对于C#中的事件,我举了个简单的例子来理解事件及其处理。
这个例子中母亲是事件的发布者,事件是吃饭了。儿子和父亲是事件的订阅者,各自的Eat方法是处理事件的方法。
下面是详细的加注的例子:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.IO; 7 8 9 /* C#中处理事件采用发布-订阅模型(publisher-subscriber model) 10 * 包含委托和事件申明的类是发布器 11 * 包含事件处理的类是订阅器 12 * 13 * C#中申明事件以及事件处理的步骤: 14 * 1.定义委托和其相关联的事件 15 * 2.在发布器中写触发事件的条件(方法、其他事件等) 16 * 3.在订阅器中写处理事件的方法程序 17 * 4.将事件订阅处理事件的程序,格式是: <事件> += new <与事件关联的委托>( <处理事件的方法名> ) 18 */ 19 namespace CsharpStudy 20 { 21 //定义一个“母亲”类,是发布器 22 class Mum { 23 //与事件关联的委托的定义 24 public delegate void mydelegate(); 25 //事件的定义 26 public event mydelegate EatEvent; 27 28 public void Cook() { 29 Console.WriteLine("母亲:我饭做好了,快来吃饭了..."); 30 //触发事件 31 EatEvent(); 32 } 33 34 } 35 36 //定义一个“儿子”类,是订阅器 37 class Son { 38 //事件处理方法 39 public void Eat() { 40 Console.WriteLine("儿子:好,等会,妈,我玩完这局再吃..."); 41 } 42 } 43 44 //定义一个“父亲”类,是订阅器 45 class Father { 46 //事件处理方法 47 public void Eat() { 48 Console.WriteLine("父亲:好,老婆,我来吃饭了..."); 49 } 50 } 51 52 53 //主程序类 54 class Program 55 { 56 //程序入口 57 static void Main(string[] args) 58 { 59 /************Main function***************/ 60 //实例化三个类 61 Mum mun = new Mum(); 62 Father father = new Father(); 63 Son son = new Son(); 64 65 //事件订阅方法(订阅son和father的Eat方法) 66 mun.EatEvent += new Mum.mydelegate(son.Eat); 67 mun.EatEvent += new Mum.mydelegate(father.Eat); 68 69 mun.Cook(); 70 71 72 /****************************************/ 73 74 Console.ReadKey(); 75 } 76 } 77 78 79 }
虽然这个例子比较简单,但是能够最粗糙的对事件的发布-订阅模型有个最直观的理解。
转载于:https://www.cnblogs.com/jeavenwong/p/8535758.html
对C#中事件的简单理解相关推荐
- 架构设计中服务层的简单理解
在ddd设计中我们经常会提到服务层,服务层是什么?职责是什么?有什么好处?. 先看简单的层次图(注:这里并没有考虑其他多余的领域逻辑数据层存储,或者UOW这些细节) 我的理解是服务层是处于我的应用程序 ...
- 9.Vue中mounted的简单理解
mounted是vue中的一个钩子函数,一般在初始化页面完成后,再对dom节点进行相关操作.官方文档的解释如下,钩子函数的官方链接为 https://cn.vuejs.org/v2/api/# ...
- JavaScript中事件循环的理解 Event Loop
为了解决单线程运行阻塞问题,JavaScript用到了计算机系统的一种运行机制,这种机制就叫做事件循环(Event Loop) 事件循环(Event Loop) 在JavaScript中,所有的任务都 ...
- Python中yield的简单理解
yield常见用法:该关键字用于函数中会把函数包装为generator.然后可以对该generator进行迭代: for x in fun(param). 按照我的理解,可以把yield的功效理解为暂 ...
- 关于数据库中FK的简单理解以及应用
问题来源:思考如果有两张表,应该以什么样的方式将两者关联起来?直接用两个表中的字段进行关联,还是使用第三张关系表进行关联? 说明:FK(foreign key).PK(primary key) (注: ...
- 对java中接口的简单理解
接口属于一个特殊的抽象类,继承的时候用 implements 实现,接口的继承不叫继承,叫做实现 接口的实现和类的继承有些类似,但是类的继承是单继承,接口可以多实现(多继承) 类的继承是对共性的继承, ...
- es中的search_type简单理解
es中只要用到了两种search_type,一种是query_then_fetch(默认),另一种是dfs_query_then_fetch,我们知道计算某个文档的得分时主要使用的是tf/idf公式, ...
- java中的二进制运算简单理解
package test9;public class StreamTest {public static void main(String[] args) {int a = 15;// 0b1111i ...
- android 点击事件消费,Android View事件分发和消费源码简单理解
Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...
- 概率密度函数及其在信号方面的简单理解(中)频谱密度函数
概率密度函数及其在信号方面的简单理解(中)频谱密度函数 (中)频谱密度函数 傅里叶级数 傅里叶变换 参考文献 后记 上学期修了外学院的自动控制原理课,学习非线性控制系统的处理时用到了傅里叶级数,老师就 ...
最新文章
- vert.x 结合JAX-RS
- iOS - OC - XML 解析 - NSXMLParser
- Python列表和元祖
- cmd.exe命令行方式执行matlab代码 【转】
- Android App用MulticastSocket监听组播,为什么连接到不同路由、在不同手机上跑,有的能收到有的收不到...
- python tkinter 背景色改变不了_python – 在Tkinter中动态更改小部件背景颜色
- DebugDiagx检测内存泄露
- 【福利解锁Part1】报名参与腾讯云专场活动,第一波干货内容免费放送
- Codeforces 915 E Physical Education Lessons
- mysql show 存储过程_mysql 存储过程 show errors
- oracle adg维护,Oracle11gR2 Aactive DataGuard(手动)装配部署及维护文档(三)之升级及rman...
- linux多个文件打包命令行,linux命令五十七之tar命令;linux多个文件压缩打包到一个压缩文件...
- 网工界的TFBOYS——netmikotextfsmntc-templates快速入门
- 目不暇接!华为2020春季新品发布会群英荟萃
- 徐思/杨玲《面向对象程序设计(Java)》第十一周学习总结
- win10重装为Ubuntu 20.04
- css 实现局部模糊 backdrop-filter
- MapReduce的C#实现及单元测试(试验)
- 领英工具:如何使用领英精灵在领英上有序归类分组管理客户?
- Linux目录结构,命令,文件类型学习
热门文章
- Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(
- K3s(Kubernetes)环境使用Let‘s Encrypt证书的部署及自动配置https域名-阿里云域名解析管理
- 2.8.PHP7.1 狐教程-【控制语句 Switch】
- text-transform 文本大小写转换、input checkbok 大小设置、letter-spacing 设置字符间距
- jsp项目连接mysql_JSP程序使用JDBC连接MySQL的教程
- mybatis逆向工程maven版本idea工具
- monitor out
- 针对利用tzselect修改时间及ln -sf 修改系统时间不好使的情况 linux 6.5
- 原生javascript知识点
- win10远程桌面配置