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

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

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

员就能够知道。

第二步:触发事件

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

第三步:球产生一个事件

创建一个新事件,这个事件还有一些参数,如球的距离和轨迹。这些参数作为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. [leet code 4] Median of Two Sorted Arrays

    1 题目 There are two sorted arrays A and B of size m and n respectively. Find the median of the two so ...

  2. Power BI Embedded 与 Bot Framework 结合的AI报表系统

    最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...

  3. 从NetCore报错到MySql安全

    之前项目在测试服务器上的一些接口时不时会报出下面的错误:(采用Abp框架) "SocketException: 你的主机中的软件中止了一个已建立的连接. STACK TRACE: at My ...

  4. SignalR2简易数据看板演示

    软件环境: 1.vs2015.windows7..net4.5 演示说明: 当点击按钮的时候,柱状图数值加1并实时变化 1.首先打开vs2015创建一个mvc项目,并安装SignalR2,具体操作可参 ...

  5. 201621123018《Java程序设计》第7周学习报告

    1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 事件.事件源. 事件监听器.事件处理方法 1.2 任 ...

  6. Linux基础命令-mkdir

    mkdir 作用:创建目录 主要参数:-p $ cd /home/test $ mkdir caianchun $ ls caianchun -p:递归参数 $ mkdir caianchun2/1/ ...

  7. Fusioncharts的数字格式化

      1.     小数点位数格式化 <chart ... decimals='2' > Eg.数值12.432, 13.4 and 13,使用<chart ... decimals= ...

  8. 机器学习与Tensorflow(2)——神经网络及Tensorflow实现

    神经网络算法以及Tensorflow的实现 一.多层向前神经网络(Multilayer Feed-Forward Neural Network) 多层向前神经网络由三部分组成:输入层(input la ...

  9. SpaceSyntax【空间句法】之DepthMapX学习:第三篇 软件介绍与一般分析流程图

    上篇讲啥来着?好像讲了数据的输入以及一些核心的概念.这篇讲软件长什么样,做那几种分析的步骤如何. 博客园/B站/知乎/CSDN @秋意正寒(我觉得这一篇肯定很多盗图的,那么我在版头加个本篇地址吧)ht ...

  10. vmworkstation安装unbuntu server 网络配置:NAT模式

    之前安装虚拟机测试环境的时候,习惯了使用桥接模式或者仅主机模式:今天偶然发现,其实NAT 模式的网络配置还是挺方便的. 在新建虚拟机的时候,选择网络模式为NAT,虚拟机创建完成之后,在vmworkst ...