对于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#中事件的简单理解相关推荐

  1. 架构设计中服务层的简单理解

    在ddd设计中我们经常会提到服务层,服务层是什么?职责是什么?有什么好处?. 先看简单的层次图(注:这里并没有考虑其他多余的领域逻辑数据层存储,或者UOW这些细节) 我的理解是服务层是处于我的应用程序 ...

  2. 9.Vue中mounted的简单理解

    mounted是vue中的一个钩子函数,一般在初始化页面完成后,再对dom节点进行相关操作.官方文档的解释如下,钩子函数的官方链接为     https://cn.vuejs.org/v2/api/# ...

  3. JavaScript中事件循环的理解 Event Loop

    为了解决单线程运行阻塞问题,JavaScript用到了计算机系统的一种运行机制,这种机制就叫做事件循环(Event Loop) 事件循环(Event Loop) 在JavaScript中,所有的任务都 ...

  4. Python中yield的简单理解

    yield常见用法:该关键字用于函数中会把函数包装为generator.然后可以对该generator进行迭代: for x in fun(param). 按照我的理解,可以把yield的功效理解为暂 ...

  5. 关于数据库中FK的简单理解以及应用

    问题来源:思考如果有两张表,应该以什么样的方式将两者关联起来?直接用两个表中的字段进行关联,还是使用第三张关系表进行关联? 说明:FK(foreign key).PK(primary key) (注: ...

  6. 对java中接口的简单理解

    接口属于一个特殊的抽象类,继承的时候用 implements 实现,接口的继承不叫继承,叫做实现 接口的实现和类的继承有些类似,但是类的继承是单继承,接口可以多实现(多继承) 类的继承是对共性的继承, ...

  7. es中的search_type简单理解

    es中只要用到了两种search_type,一种是query_then_fetch(默认),另一种是dfs_query_then_fetch,我们知道计算某个文档的得分时主要使用的是tf/idf公式, ...

  8. java中的二进制运算简单理解

    package test9;public class StreamTest {public static void main(String[] args) {int a = 15;// 0b1111i ...

  9. android 点击事件消费,Android View事件分发和消费源码简单理解

    Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...

  10. 概率密度函数及其在信号方面的简单理解(中)频谱密度函数

    概率密度函数及其在信号方面的简单理解(中)频谱密度函数 (中)频谱密度函数 傅里叶级数 傅里叶变换 参考文献 后记 上学期修了外学院的自动控制原理课,学习非线性控制系统的处理时用到了傅里叶级数,老师就 ...

最新文章

  1. vert.x 结合JAX-RS
  2. iOS - OC - XML 解析 - NSXMLParser
  3. Python列表和元祖
  4. cmd.exe命令行方式执行matlab代码 【转】
  5. Android App用MulticastSocket监听组播,为什么连接到不同路由、在不同手机上跑,有的能收到有的收不到...
  6. python tkinter 背景色改变不了_python – 在Tkinter中动态更改小部件背景颜色
  7. DebugDiagx检测内存泄露
  8. 【福利解锁Part1】报名参与腾讯云专场活动,第一波干货内容免费放送
  9. Codeforces 915 E Physical Education Lessons
  10. mysql show 存储过程_mysql 存储过程 show errors
  11. oracle adg维护,Oracle11gR2 Aactive DataGuard(手动)装配部署及维护文档(三)之升级及rman...
  12. linux多个文件打包命令行,linux命令五十七之tar命令;linux多个文件压缩打包到一个压缩文件...
  13. 网工界的TFBOYS——netmikotextfsmntc-templates快速入门
  14. 目不暇接!华为2020春季新品发布会群英荟萃
  15. 徐思/杨玲《面向对象程序设计(Java)》第十一周学习总结
  16. win10重装为Ubuntu 20.04
  17. css 实现局部模糊 backdrop-filter
  18. MapReduce的C#实现及单元测试(试验)
  19. 领英工具:如何使用领英精灵在领英上有序归类分组管理客户?
  20. Linux目录结构,命令,文件类型学习

热门文章

  1. Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(
  2. K3s(Kubernetes)环境使用Let‘s Encrypt证书的部署及自动配置https域名-阿里云域名解析管理
  3. 2.8.PHP7.1 狐教程-【控制语句 Switch】
  4. text-transform 文本大小写转换、input checkbok 大小设置、letter-spacing 设置字符间距
  5. jsp项目连接mysql_JSP程序使用JDBC连接MySQL的教程
  6. mybatis逆向工程maven版本idea工具
  7. monitor out
  8. 针对利用tzselect修改时间及ln -sf 修改系统时间不好使的情况 linux 6.5
  9. 原生javascript知识点
  10. win10远程桌面配置