对C#中事件的简单理解
对于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#中事件的简单理解的更多相关文章
- 对JS中事件委托的理解
什么是事件委托: 事件委托——给父元素绑定事件,用来监听子元素的冒泡事件,并找到是哪个子元素的事件.(不理解冒泡的可以去百度下) 定义:利用事件冒泡处理动态元素事件绑定的方法,专业术语叫事件委托. 使 ...
- 事件循环:微任务和宏任务在v8中实现的简单理解
微任务 在js中,当使用promise,会将当前任务加入事件执行的微任务队列,有且只有这一种方法可以,因为当使用了promise,在JS引擎中会触发VM::queueMicrotask,会向m_mic ...
- 对Django框架中Cookie的简单理解
概念的理解:首先Cookie和Session一样,是django中用于视图保持状态的方案之一.为什么要进行视图保留呢,这是因为浏览器在向服务器发出请求时,服务器不会像人一样,有记忆,服务器像鱼一样,在 ...
- 对JSP中的Session 简单理解
我的理解: 简单来说,要使用服务器端的session对象,就是要有其对应的key,即sessionid,它只认识sessionid. 下面我说的cookie,url重写或者隐藏表单,都是为了将其对应的 ...
- java中volatile的简单理解
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7833881.html 据说,volatile是java语言中最轻量级的并发控制方式. vo ...
- PHP中的traits简单理解
Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化.先来例子看下语法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...
- 对于js中事件冒泡的理解分析
一. 事件 事件的三个阶段:事件捕获 -> 事件目标 -> 事件冒泡 捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象: 目标阶段:到达目标事件位置(事发地) ...
- golang中GOPATH的简单理解
1.为什么要配置GOPATH 配置GOPATH的用意是为了方便项目的部署和构建,以及可以直接使用go get 命令下载第三方的包到自己的项目的src下和相关的执行文件bin目录,和中间文件pkg sr ...
- java中的二进制运算简单理解
package test9; public class StreamTest { public static void main(String[] args) { int a = 15;// 0b11 ...
随机推荐
- zookeeper启动占用8080端口,跟HDFS默认使用的8080端口冲突
zookeeper最近的版本中有个内嵌的管理控制台是通过jetty启动,也会占用8080 端口. 通过查看zookeeper的官方文档,发现有3种解决途径: (1).删除jetty. (2)修改端口. ...
- ASCII,UTF-8,Unicode字符串相互转换
#include<string> #include<windows.h> #include<vector> using namespace std; //utf8 ...
- android 动画总结一
一.补间动画 补间动画就是指开发者指定动画的开始.动画的结束的"关键帧",而动画变化的"中间帧"由系统计算,并补齐. 补间动画分为四种:平移动画(Transla ...
- stm32 引脚映射 和 ADC
老是弄不明白ADC的输入到底在哪,看了stm32F103Ve的datasheet,将引脚和通道的映射关系贴在下面: 好了,写到这,我已经看了中文手册一上午了,可是啥都没看懂,下午接着看,写代码不重要, ...
- ES Client
关于 ElasticSearch的学习参见:ELK | wjcx_sqh 本文分别学习 .Net | Java 下操作 ES: .Net 目前主流的 .Net 客户端有 2 种: PlainElast ...
- HTTP 协议部分常识简介
1.状态码 具体的状态码可以百度查找,但是对于状态码的大致分类有一个清楚的了解 1XX ----信息状态码------接受的请求正在处理 2XX ------成功状态码 ------请求正常处理完 ...
- Scala配置环境变量windows
scala下载官网网址:http://www.scala-lang.org/download/ 1.下载scala-2.10.4.msi 2.点击安装scala,默认安装路径 3.配置环境变量 ( ...
- P1168 中位数[堆 优先队列]
题目描述 给出一个长度为NNN的非负整数序列AiA_iAi,对于所有1≤k≤(N+1)/21 ≤ k ≤ (N + 1) / 21≤k≤(N+1)/2,输出A1,A3,…,A2k−1A_1, A_3 ...
- Robot Framework--接口测试中常见的四种POST方式
写接口测试用例时,遇到以json格式提交数据时,报错,Request如下图: Response如下图: 改成form格式提交,可以正常运行,如下图: 代码如下: ------------------- ...
- Mybatis二级缓存的简单应用
1.接口 public interface MemberMapperCache { public Members selectMembersById(Integer id); } 2.POJO类 实现 ...