对于C#中的事件,我举了个简单的例子来理解事件及其处理。

这个例子中母亲是事件的发布者,事件是吃饭了。儿子和父亲是事件的订阅者,各自的Eat方法是处理事件的方法。

下面是详细的加注的例子:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; /* C#中处理事件采用发布-订阅模型(publisher-subscriber model)
* 包含委托和事件申明的类是发布器
* 包含事件处理的类是订阅器
*
* C#中申明事件以及事件处理的步骤:
* 1.定义委托和其相关联的事件
* 2.在发布器中写触发事件的条件(方法、其他事件等)
* 3.在订阅器中写处理事件的方法程序
* 4.将事件订阅处理事件的程序,格式是: <事件> += new <与事件关联的委托>( <处理事件的方法名> )
*/
namespace CsharpStudy
{
//定义一个“母亲”类,是发布器
class Mum {
//与事件关联的委托的定义
public delegate void mydelegate();
//事件的定义
public event mydelegate EatEvent; public void Cook() {
Console.WriteLine("母亲:我饭做好了,快来吃饭了...");
//触发事件
EatEvent();
} } //定义一个“儿子”类,是订阅器
class Son {
//事件处理方法
public void Eat() {
Console.WriteLine("儿子:好,等会,妈,我玩完这局再吃...");
}
} //定义一个“父亲”类,是订阅器
class Father {
//事件处理方法
public void Eat() {
Console.WriteLine("父亲:好,老婆,我来吃饭了...");
}
} //主程序类
class Program
{
//程序入口
static void Main(string[] args)
{
/************Main function***************/
//实例化三个类
Mum mun = new Mum();
Father father = new Father();
Son son = new Son(); //事件订阅方法(订阅son和father的Eat方法)
mun.EatEvent += new Mum.mydelegate(son.Eat);
mun.EatEvent += new Mum.mydelegate(father.Eat); mun.Cook(); /****************************************/ Console.ReadKey();
}
} }

虽然这个例子比较简单,但是能够最粗糙的对事件的发布-订阅模型有个最直观的理解。

对C#中事件的简单理解的更多相关文章

  1. 对JS中事件委托的理解

    什么是事件委托: 事件委托——给父元素绑定事件,用来监听子元素的冒泡事件,并找到是哪个子元素的事件.(不理解冒泡的可以去百度下) 定义:利用事件冒泡处理动态元素事件绑定的方法,专业术语叫事件委托. 使 ...

  2. 事件循环:微任务和宏任务在v8中实现的简单理解

    微任务 在js中,当使用promise,会将当前任务加入事件执行的微任务队列,有且只有这一种方法可以,因为当使用了promise,在JS引擎中会触发VM::queueMicrotask,会向m_mic ...

  3. 对Django框架中Cookie的简单理解

    概念的理解:首先Cookie和Session一样,是django中用于视图保持状态的方案之一.为什么要进行视图保留呢,这是因为浏览器在向服务器发出请求时,服务器不会像人一样,有记忆,服务器像鱼一样,在 ...

  4. 对JSP中的Session 简单理解

    我的理解: 简单来说,要使用服务器端的session对象,就是要有其对应的key,即sessionid,它只认识sessionid. 下面我说的cookie,url重写或者隐藏表单,都是为了将其对应的 ...

  5. java中volatile的简单理解

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7833881.html 据说,volatile是java语言中最轻量级的并发控制方式. vo ...

  6. PHP中的traits简单理解

    Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化.先来例子看下语法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...

  7. 对于js中事件冒泡的理解分析

    一. 事件 事件的三个阶段:事件捕获 -> 事件目标 -> 事件冒泡 捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象: 目标阶段:到达目标事件位置(事发地) ...

  8. golang中GOPATH的简单理解

    1.为什么要配置GOPATH 配置GOPATH的用意是为了方便项目的部署和构建,以及可以直接使用go get 命令下载第三方的包到自己的项目的src下和相关的执行文件bin目录,和中间文件pkg sr ...

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

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

随机推荐

  1. redis主从中断异常处理

    线上预警主从中断: 查看线上复制信息: # Replication role:slave master_host:master_host master_port:6379 master_link_st ...

  2. Spring Cloud Alibaba学习笔记(1) - 整合Spring Cloud Alibaba

    Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Al ...

  3. hdu1171 灵活的运用背包问题咯。。。 还有!!!! 合理的计算数组的范围!! wa了好多次!

    Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...

  4. 缓存数据库memcache、redis原理对比

    一.问题:     数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库     (这里 ...

  5. 剖析gcc -v输出

    分析gcc -v的详细信息的意义 首先我们需要清楚一点,我们并不能完全弄清楚gcc -v的所有信息,因为毕竟我们并不是GCC编译器集合的实现者,对于这些信息,他们才是最清楚的.由于我们不能将所有的信息 ...

  6. 爬虫:selenium请求库

    一.介绍 二.安装 三.基本使用 四.选择器 五.等待元素被加载 六.元素交互操作 七.其他 八.项目练习 一.介绍 # selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requ ...

  7. sql index改怎么建

    https://stackoverflow.com/questions/11299217/how-can-i-optimize-this-sql-query-using-indexes ------- ...

  8. 22 webpack结合Vue使用的总结

    总结梳理:webpack中如何使用vue: 1.安装vue的包:cnpm i vue -S 2.由于 在webpack中,推荐使用 .vue这个组件模板文件定义组件, 所以,需要安装 能解析这种文件的 ...

  9. 微服务学习及.net core入门教程

    https://www.cnblogs.com/jackyfei/p/12067708.html https://www.cnblogs.com/jesse2013/ http://video.jes ...

  10. 云计算(3)-what is new in today's Cloud

    What is new in today's Cloud Four features new in today's Clouds 如果一个problem有以上4个features里面的一个或者多个,则 ...