事件是C#中另一高级概念,使用方法和委托相关。奥运会参加百米的田径运动员听到枪声,比赛立即进行。其中枪声是事件,而运动员比赛就是这个事件发生后的动作。不参加该项比赛的人对枪声没有反应。

从程序员的角度分析,当裁判员枪声响起,发生了一个事件,裁判员通知该事件发生,参加比赛的运动员仔细听枪声是否发生。运动员是该事件的订阅者,没有参赛的人不会注意,即没有订阅该事件。

C#中使用事件需要的步骤:
1、创建一个委托;
2、将创建的委托与特定事件关联(.Net类库中的很多事件都是已经定制好的,所以他们也就有相应的一个委托,在编写关联C#事件处理程序--也就是当有事件发生时我们要执行的方法的时候我们需要和这个委托有相同的签名);
3、编写C#事件处理程序;
4、利用编写的C#事件处理程序生成一个委托实例;
5、把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫订阅事件。

一、定义事件

定义事件时,发生者首先要定义委托,然后根据委托定义事件。定义事件的语法如下:

<访问修饰符> event 委托名 事件名;

定义事件时,一定要有一个委托类型,用这个委托类型来定义处理事件的方法类型。下面定义一个发布者类,并在其内部定义eventRun事件。

1 class Judgment
2 {
3     //定义一个委托
4     public delegate void delegateRun();
5     //定义一个事件
6     public event delegateRun eventRun;
7 }

二、订阅事件

定义好事件后,与事件有关的人会订阅事件,只有订阅事件的对象才会收到发生事件的通知,没有订阅该事件的对象则不会收到通知。订阅事件的语法如下:

事件名+=new 委托名(方法名);

假如方法名为Run,那么订阅事件eventRun的代码如下:

judgment.eventRun+=new Judgment.delegateRun(runsport.Run);

judgment为类Judgment的对象,runsport为运动员类RunSports的对象,Run为其中的方法。

事件的订阅通过“+=”操作符来实现,可以给事件加一个或多个方法委托。

三、引发事件

一般都是在满足某个条件下引发事件,裁判员枪声一响,引发运动员奔跑这个事件。在编程中可以用条件诘句,也可以使用方法引发事件。

1
2
3
4
public void Begin()
    {
          enentRun();
    }

这段代码中,通过Begin方法引发事件enentRun。引发事件的语法与调用方法的语法相同,引发该事件时,将调用订阅事件的对象的所有委托。下面代码演示裁判员枪声响起到引发运动员比赛的动作,完整代码:

 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 6 namespace Example_EventTest7 {8     class Judgment9     {
10         //定义一个委托
11         public delegate void delegateRun();
12         //定义一个事件
13         public event delegateRun eventRun;
14         //引发事件的方法
15         public void Begin()
16         {
17             eventRun();//被引发的事件
18         }
19     }
20     class RunSports
21     {
22         //定义事件处理方法
23         public void Run()
24         {
25             Console.WriteLine("运动员开始比赛");
26         }
27     }
28     class Program
29     {
30         static void Main(string[] args)
31         {
32             RunSports runsport = new RunSports();//实例化事件发布者
33             Judgment judgment = new Judgment();//实例化事件订阅者
34             //订阅事件
35             judgment.eventRun+=new Judgment.delegateRun(runsport.Run);
36             //引发事件
37             judgment.Begin();
38             Console.ReadKey();
39         }
40     }
41 }

Judgment类为事件发布者,RunSports类为事件订阅者。引发事件的方法为Begin();。一个事件可以有多个订阅者,事件的发布者也可以是事件的订阅者。

转载于:https://www.cnblogs.com/weihengblogs/p/10076628.html

C#事件-使用事件需要的步骤相关推荐

  1. 创建一个storageevent事件_事件循环:微任务和宏任务

    浏览器中 JavaScript 的执行流程和 Node.js 中的流程都是基于 事件循环 的. 理解事件循环的工作方式对于代码优化很重要,有时对于正确的架构也很重要. 在本章中,我们首先介绍有关事物工 ...

  2. DOM(四)——事件、事件模型(冒泡)与事件对象的功能

    文章目录 一.事件 二. 事件绑定 1. 在HTML中手工绑定 2. 在js中以赋值方式绑定 3. 在js中以添加事件监听对象的方式绑定: 3.1 原理 3.2 移除事件监听对象 三.事件模型 四.事 ...

  3. JavaScript 事件和事件类型

    事件和事件类型 认识事件和事件类型 什么是事件         事件是发生并得到处理的操作,即:事情来了,然后处理. 如: 电话铃声响起(事件发生) --需要接电话(处理) 按钮被点击了,然后对应一个 ...

  4. ACL 2022事件相关(事件抽取、事件关系抽取、事件预测等)论文汇总

    ACL 2022事件相关(事件抽取.事件关系抽取.事件预测等)论文汇总,已更新全部的论文. Event Extraction Query and Extract: Refining Event Ext ...

  5. Vue | 使用Vue脚手架 【脚手架的基本使用+ref属性+props属性+mixin混入+插件scoped样式+TodoList+浏览器本地存储+组件的自定义事件+全局事件总线+过度与动画】

    文章目录 脚手架的基本使用 初始化脚手架 分析脚手架结构 render函数 修改默认配置 ref属性 props属性 mixin混入 插件 scoped样式 Todo-list案例 组件化编码流程(通 ...

  6. html 鼠标中键事件,Javascript事件模拟(鼠标事件、键盘事件)

    在javascript编程中,事件是用来描述网页中某一特定有趣时刻的,众所周知事件通常是在由用户和浏览器进行交互时触发,其实不然,通过Javascript可以在任何时间触发特定的事件,并且这些事件与浏 ...

  7. android 拖动 点击事件,Android事件详解——拖放事件DragEvent

    1.Android拖放框架的作用? 利用Android的拖放框架,可以让用户用拖放手势把一个View中的数据移到当前layout内的另一个View中去. 2.拖放框架的内容? 1)拖放事件类 2)拖放 ...

  8. 事件流--事件冒泡现象及阻止

    事件冒泡现象 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF ...

  9. 用户表单事件(focus事件)

    以前做用户系统的时候经常用到表单验证,正则表达式事件来处理和绑定事件和进行事件,这里说的其实只是一小部分,也不是很值得写,但是今天遇到了还是写一下,毕竟基础还是蛮重要的,就算懂的童鞋,巩固一下也是好的 ...

最新文章

  1. (转)自动化管理工具Saltstack之nginx部署
  2. yolov5 v3.0训练出现KeyError错误
  3. NIO 之 Buffer 图解
  4. bootstrap-table 新增可编辑行_现代Web开发堆栈工具DevExtreme 新增Gantt组件,助力项目管理...
  5. 编辑器内容FCKeditor的js验证以及FCKeditor内容是否为空判断
  6. opencv HOG SVM
  7. 网站发布助手V1.1 (去年写的简单小工具)
  8. 使用图灵机器人api接口开发智能聊天机器人
  9. chm文档制作 java_自己动手制作chm格式开源文档
  10. 微信小程序:语音变声器支持多种音效与流量主
  11. 51单片机学习笔记之数码管1显示数字0以及使用蜂鸣器
  12. 2018麦考林杂志计算机科学,2018年加拿大大学麦考林杂志排名发布,快来围观你喜欢的学校排名有什么变动没?...
  13. 小程序开发入门常见小问题-(1)
  14. 2019肖秀荣考研政治3件套
  15. 用计算机制作程序框图,流程图 结构图制作更轻松
  16. 手机顶部有小红点_苹果手机听筒上方有红点 iphone11顶部红点闪烁
  17. 《超大流量分布式系统架构解决方案》
  18. 全球wcdma运营频段
  19. MarkovModels马尔科夫模型读书笔记
  20. python部署到iis_IIS 部署 Python 环境

热门文章

  1. Maven安装与配置(最实用!!!)eclipse中配置maven
  2. 2022-2028年中国激光切管机行业市场研究及前瞻分析报告
  3. 2022-2028年中国蛋白石行业发展现状分析及投资前景趋势报告
  4. 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...
  5. 1 用python进行OpenCV实战之用OpenCV3实现图片载入、显示和储存
  6. 认清自己,愉快度过每一天
  7. 反编译软件dnSpy中修改baml文件
  8. LeetCode简单题之判断国际象棋棋盘中一个格子的颜色
  9. LeetCode简单题之判断字符串的两半是否相似
  10. SpringMVC——通俗易懂讲讲Ajax~