• C#基础知识回顾--委托事件


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

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

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

    员就能够知道。

    第二步:触发事件

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

    第三步:球产生一个事件

             创建一个新事件,这个事件还有一些参数,如球的距离和轨迹。这些参数作为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);

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

  • 相关阅读:
    Codeforces Round #526 (Div. 2) E. The Fair Nut and Strings
    Codeforces Round #526 (Div. 2) D. The Fair Nut and the Best Path
    S2SH项目实现分页功能
    S2SH项目实现分页功能
    HibernateDaoSupport类的使用
    object references an unsaved transient instance
    object references an unsaved transient instance
    启动Tomcat报WEB-INFlibj2ee.jar jar not loaded异常的解决办法
    启动Tomcat报WEB-INFlibj2ee.jar jar not loaded异常的解决办法
    解决eclipse中出现Resource is out of sync with the file system问题
  • 原文地址:https://www.cnblogs.com/smiler/p/3218936.html
Copyright © 2020-2023  润新知