在上一篇看到他我一下子就悟了(续)---委托,被人狂喷。说写的太空,没有什么内容之类的。所以准备在这里重写下,不过还是按着以前的方式尽量简单的写。这里我们以打篮球为例。

第一步:首先,其他对象订购事件

当发球的球员产生它的发球事件之前,其他球员需要订购这个事件,采用这种方式,只要出现一个发球事件,其他球

员就能够知道。

第二步:触发事件

当球被发出时,此时发球员对象产生一个新事件。

第三步:球产生一个事件

创建一个新事件,这个事件还有一些参数,如球的距离和轨迹。这些参数作为EventArgs对象的一个实例关联到事件,然后

事件发出,所有监听对象都能得到这个事件。一旦事件产生,所有订购者都会得到通知,并做一些处理。

第四步:订购者得到通知

由于其他球员对象都订购了发球球员对象的发球事件,所以这些对象会得到通知,并先后调用他们的事件处理方法。事件处

理程序就是产生事件时订购者对象运行的方法,一旦发球者产生了其事件,就会创建一个BallEventArgs对象,其中包含球的轨迹

和距离,从而将个对象传递到订购者的事件处理程序。

第五步:各个对象处理事件

现在,其他球员都会以他们自己的方式处理发球事件。不过并不是同时运行---他们的事件处理程序会先后得到调用,并以

BallEventArgs对象的一个引用作为参数。

下面我们分析下把各个部分连接起来

1.我们需要一个标示事件参数的对象

要记住,Play事件(我们下面把发球事件都说成play事件)有一些需要携带的参数。所以我们需要一个简单的对象来表示这些参数。

为此,.NET 提供了一个标准的类,名为EventArgs,不过这个类没有任何成员。它的目的只有一个,就是允许将你的事件的参数对象传

递到事件事件处理程序加以使用。 以下是事件参数类的声明:

public class BallEventArgs:EventArgs

2.接下来需要在产生事件的类中定义这个事件

我们在SendPlayer类中(就是发球球员类,汗,英文不是太好,见谅)定义一个事件,以便其他对象订购这个事件。
声明如下:

public event EventHandler Play;

event关键字后面的EventHandler不是C#的保留字,它是.NET提供的。之所以需要它,是为了告诉订购事件的对象。

他们的事件处理方法应该是什么样子(有怎样的签名)

即他们的事件处理程序应当有两个参数,一个参数是名为sender的object,另一个参数是名为e的EventArgs引用。

3.订购类需要事件处理方法

订购SendPlayer的Play事件的各个对象都需要一个事件处理程序。其实我们早就知道事件处理程序是如何工作的,

你拉一个Button,然后双击它,IDE就自动给你增加一个click事件。所以Play的事件你看起来应该很熟悉。

          

             void  sendPlayer_Play(object sender,EventArgs e)

C#中并没有规则要求事件处理程序必须按某种方式命名,不过这是一种非常标准的命名约定:首先是对象引用名,

后面一个下划线,再后面是事件名。

4.各个对象订购事件

一旦建立了事件处理程序,其他球员对象需要关联他们自己的事件处理程序。每个对象都有自己特定的

sendPlayer_Play方法,对这个事件做出不同的响应。所以,

如果有一个SendPlayer对象引用变量或字段,名为sendPlayer,可以用+=操作符关联事件处理程序:

sendPlayer.Play+=new EventHandler(sendPlayer_Play);

5.SendPlayer对象产生一个事件通知订购者球赛开始。

既然已经创建事件,那么触发这个事件就很容易,只需要调用Play事件。

if(Play!=null)

Play(this,e);

基本的步骤都有了,大家可以按照步骤写自己的事件了。

C#基础知识回顾--委托事件的更多相关文章

  1. [.NET] C# 知识回顾 - Event 事件

    C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...

  2. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  3. [C#] C# 知识回顾 - 委托 delegate

    C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...

  4. C#基础知识回顾-- 反射(3)

    C#基础知识回顾-- 反射(3)   获取Type对象的构造函数: 前一篇因为篇幅问题因为篇幅太短被移除首页,反射这一块还有一篇“怎样在程序集中使用反射”, 其他没有什么可以写的了,前两篇主要是铺垫, ...

  5. C#基础知识回顾--线程传参

    C#基础知识回顾--线程传参 在不传递参数情况下,一般大家都使用ThreadStart代理来连接执行函数,ThreadStart委托接收的函数不能有参数, 也不能有返回值.如果希望传递参数给执行函数, ...

  6. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  7. C#基础知识回顾-- 反射(1)

    C#基础知识回顾-- 反射(1)   反射(reflection)是一种允许用户获得类型信息的C#特性.术语“反射”源自于它的工作方式: Type对象映射它所代表的底层对象.对Type对象进行查询可以 ...

  8. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  9. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

随机推荐

  1. cxgrid回车移到下一个单元格

    cxgrid回车移到下一个单元格   cxgrid回车移到下一个单元格 作用:表格式录入全键盘操作. 设置cxgrid1Dbtableview1.optionsBehavior.goToNextCel ...

  2. 实验1 单片机IO口应用及数码管显示

    1.   单片机驱动蜂鸣器的实验: a)         说明:Lab51单片机实验板的蜂鸣器连接到单片机的P1.5 b)        基本要求:控制蜂鸣器每2秒响0.5秒. #include &l ...

  3. 检查.net dll构建的目标平台是any cpu、x86、x64

    有时候,需要检查构建的dll是否针对正确的平台 可以使用CorFlags.exe(它是.NET Framework SDK的一部分)从dll中查找此信息.运行CorFlags.exe将产生以下输出: ...

  4. 【转】IE浏览器CSS BUG集锦

    Internet Explorer CSS Bugs Overview Internet Explorer is famous for not supporting many of CSS prope ...

  5. SAS Shortcut Keys

    最常用的键有F3(运行代码).F6(查看log信息).Ctrl + / (注释代码).Ctrl + Shift + / (取消代码注释) SAS系统一共有4类快捷键,其中部分有重复, 第一类可自定义. ...

  6. POI读写海量Excel

    目前处理Excel的开源javaAPI主要有两种,一是Jxl(JavaExcel API),Jxl只支持Excel2003以下的版本.另外一种是Apache的Jakarta POI,相比于Jxl,PO ...

  7. Spring Boot中使用@Async实现异步调用

    在Spring Boot中,我们只需要通过使用@Async注解就能简单的将原来的同步函数变为异步函数,为了让@Async注解能够生效,还需要在Spring Boot的主程序中配置@EnableAsyn ...

  8. elasticsearch+logstash+redis+kibana 实时分析nginx日志

    1. 部署环境 2. 架构拓扑 3. nginx安装 安装在192.168.176.128服务器上 这里安装就简单粗暴了直接yum安装nginx [root@manager ~]# yum -y in ...

  9. 课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 0、学习目标

    Learn to build a neural network with one hidden layer, using forward propagation and backpropagation ...

  10. Redis笔记(1)数据结构与对象

    1.前言 此系列博客记录redis设计与实现一书的笔记,提取书本中的知识点,省略相关说明,方便查阅. 2.基本数据结构 2.1 简单动态字符串SDS(simple dynamic string) 结构 ...