.Net事件机制

              这几日太忙了,复习专业课,忙了几日其实也没认真看书,呵呵,下面再说一下事件,这个便是只要你真正理解了这个也就是委托的一种特例,是一种特殊的委托类型(也可以看作一个字段但是依旧返回的是委托类型,为什么呢,因为即便是string str ,str依旧是一个string类型 的参数),这个只要自己理解就不难了,问人根本解决不了问题和疑惑,昨日开始看时问了几个开发了几年的程序员一个问题,他们也是回答摸棱两可,最后没办法还是自己搞定了。

      由于马上要上课去了,我只能在中午画了一个思维图和写的一个Demo给大家看一下我的思路,如有不同见解可以留言以便讨论。


 
 
 示例如下:
 
using System;

namespace 事件研究
{
    //包含事件的参数类
    class WorkEventArgs : EventArgs
    {
      private  string name;
      private string position;
      public string Name
      {
          get { return name; }
      }
      public string Position
      {
          get { return position ;}
      }
      public string Info
      {
          get { return ( "工作人员信息" );}
      }
      public WorkEventArgs( string name , string position)
      {
          this . name = name;
          this . position = position;
      }
    }
    //定义一个委托
    delegate void WorkEventHandler( object sender , WorkEventArgs e);
    //包含事件的声明和触发事件的方法的类
    class Work
    {
        private string name;
        private string position;
        public string Name
        {
            set { name = value; }
            get { return name; }
        }
        public string Position
        {
            set { position = value; }
            get { return position; }
        }
      //声明事件
       public event WorkEventHandler InfoDisplay;
        //触发事件的方法
       protected virtual void OnWork( WorkEventArgs e)
       {
           if ( InfoDisplay != null)
           {
               InfoDisplay( this , e);
           }
       }
        //引发事件
       public void DisWork()
       {
           WorkEventArgs e = new WorkEventArgs( "" , ""); //参数类只是让我们使用.net提供的委托方便而已
           OnWork( e);
           if ( Name != null && position != null )
           {
               string s = string . Format( "姓名:{0}\n职位:{1}" , Name , Position);
               Console . WriteLine(s);
           }
           //初始化一下事件的参数类并提取信息
            WorkEventArgs c = new WorkEventArgs( Name , position);
            Console . WriteLine( "姓名:{0}\n职位:{1}" , c . Name , c . Position);
         
       }
    }
    //包含事件处理方法的类
    class ResearchDepartment
    {
       //事件的处理方法
        public void DisplayInfo( object sender , WorkEventArgs e)
        {
            Console . WriteLine( e . Info);
            (( Work) sender ). Name = "小明";
            (( Work) sender ). Position = "部门经理";
          
        }
        public void Display( object sender , WorkEventArgs e)
        {
            Console . WriteLine( "后两条为初始化一下事件的参数类并提取信息!\n");
        }
        public void BookEvent( Work worker)
        {
            worker . InfoDisplay += new WorkEventHandler( Display);
            worker . InfoDisplay += new WorkEventHandler( DisplayInfo);
        }

        void worker_InfoDisplay( object sender , WorkEventArgs e)
        {
            throw new NotImplementedException();
        }
    }
    class TestEvent
    {
        public static void Main()
        {
            //初始化发行者
            Work worker = new Work();
            //初始化订阅者
            ResearchDepartment rd = new ResearchDepartment();
            //订阅事件(即把事件的处理方法绑定到发送者的委托实例上)
            rd . BookEvent( worker);
            worker . DisWork();
            Console . ReadKey( true);
        }
    }
}

转载于:https://www.cnblogs.com/rohelm/archive/2012/03/07/2384086.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值