C#的事件机制

C#的事件机制 

/*
 * 我已经在该例中把创建,发送,触发,处理事件的过程用一步步的步骤描述出来了,不过现在还是迷迷糊糊的,有不明白的地方请见谅.
 */


using System;
//命名空间
namespace testEventApp
{
/*第一步:创建一个委托*/

    //定义委托Class2_Event_Handler
    public delegate void Class2_Event_Handler(object sender, string strEventArg);

 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
/*=======================================================================
    事件接收方类
=======================================================================*/

 
    //定义类Class1
 class Class1
 {
        //创建类Class1的默认构造器
  public Class1()
  {
   Console.WriteLine ("Class1>>>创建一个Class1对象!");
  }
/*第四步:编写事件处理函数,该函数要具有与第一步中创建的委托相同的签名
 */
        private void On_Class2Event(object sender, string strEventArg)
        { //Class2中事件发生时的处理函数
            Console.WriteLine("Class1>>>收到Class2中的事件:" + strEventArg);
            if (strEventArg == "exit")
            {
                Class2 senderRef = (Class2)sender;
                //取消事件处理函数与Class2中事件的关联
                senderRef.Class2_Event -= new Class2_Event_Handler(this.On_Class2Event);
                Console.WriteLine("Class1>>>不再接收Class2的事件!输入exit退出!");
            }
        }
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]

  static void Main(string[] args)
  {
   //
   // TODO: 在此处添加代码以启动应用程序
   //
   Class1 aClass1 = new Class1 ();
   Class2 aClass2 = new Class2 (); //创建一个Class2对象
/*第五步:将第四步中编写的事件处理函数与事件建立关联(也就是利用事件处理函数生成第一步中创建的委托的委托实例)
 */
   //将事件处理函数与Class2中的事件关联
   aClass2.Class2_Event += new Class2_Event_Handler(aClass1.On_Class2Event );
   //调用Class2中的方法,等待其触发事件
   aClass2.Class2_Event_Riser ();
  }

  
 }
    /*=====================================================================
        事件发送方类
    =====================================================================*/
    //定义类Class2
 class Class2
 {
        /*定义类Class2的构造器*/
  public Class2()
  {
   Console.WriteLine ("Class2>>>创建一个Class2对象!");
  }

/*第二步:利用第一步中创建的委托创建事件,这样委托和时间之间就建立了关联(.NET类库中的很多事件都是已经订制好的,所以它们都有相应的
  委托,在编写关联时间处理程序(也就是有事件发生时我们要执行的方法的时候)我们需要和这个委托相同的签名。*/
  //利用delegate,定义一个事件
        //在类中声明一个事件的格式: public event 委托名 事件名
  public event Class2_Event_Handler Class2_Event;

/*第三步:创建可以触发事件的方法*/

  //一个可以触发事件的方法
  public void Class2_Event_Riser()
  {
   string strRead;
   while(true)
   {
    Console.Write ("Class2>>>");
    strRead = Console.ReadLine ();

    if ( Class2_Event!=null )//当事件处理函数存在时
    {
     Console.WriteLine ("Class2>>>发送事件:"+strRead);
     Class2_Event(this, strRead);//触发delegate中的事件处理函数
    }
    else if (strRead == "exit")
    {
     System.Environment .Exit (-1);    
    }
   }
  }
 }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值