对于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. tslint 忽略格式检查

    // tslint:disable——忽略该行以下所有代码出现的错误提示,可以在文件首行添加达到忽略整个文件的格式提示 // tslint:enable——当前ts文件重新启用tslint// tsl ...

  2. Go 关于 kafka 的生产者、消费者实例

    zookeeper + kafka 首先要在 apche 官网下载 kafka 的程序包(linux版本),然后放到服务器上解压,得到以下目录 bin 目录下包含了服务的启动脚本 启动 zookeep ...

  3. VBA Exit Do语句

    当想要根据特定标准退出Do循环时,可使用Exit Do语句. 它可以同时用于Do...While和Do...Until直到循环. 当Exit Do被执行时,控制器在Do循环之后立即跳转到下一个语句. ...

  4. ubuntu下使用JNI Java调用C++的例子

    TestJNI.java public class TestJNI { static{ System.load("/home/buyizhiyou/workspace/JNI/src/lib ...

  5. ABAP Netweaver体内的那些寄生式编程语言

    今天这篇文章的主题是:寄生. Jerry最近看到朋友圈里一位朋友分享的一张寄居蟹的照片,对于Jerry这种在内地长大的又很宅的人来说,没有机会看到寄居蟹,所以觉得很新鲜: 寄居蟹主要以螺壳为寄体,寄居 ...

  6. 【前端开发】nrm切换淘宝镜像&nvm管理node版本及切换

    说明:nrm是切换淘宝镜像用的,nvm是node的版本切换用的(可在自己电脑安装多个版本node,便于不同项目的支持) 一.nrm的安装及常见命令: 安装nrmnpm install -g nrm 查 ...

  7. Windows如何打开/关闭 服务

    先右键Windows主菜单,点击计算机管理: 点击服务和应用程序: 点击服务:

  8. Docker Compose编排工具部署lnmp实践及理论(详细)

    目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...

  9. RHEL/CentOS/Fedora各种源(EPEL、Remi、RPMForge、RPMFusion)

    参考:RHEL/CentOS/Fedora各种源(EPEL.Remi.RPMForge.RPMFusion)配置 简介 CentOS 默认自带 CentOS-Base.repo 源, 但官方源中去除了 ...

  10. excel转sql代码

    1. 首先一个标准的excel表格,如下: 2. 在同一行,后面一个单元格,英文输入法状态下输入以下:=CONCATENATE() =CONCATENATE("insert into tab ...