zoukankan      html  css  js  c++  java
  • .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);
            }
        }
    }
  • 相关阅读:
    一起谈.NET技术,ASP.NET的Session 详解 狼人:
    一起谈.NET技术,asp.net控件开发基础(22) 狼人:
    一起谈.NET技术,asp.net控件开发基础(18) 狼人:
    一起谈.NET技术,asp.net控件开发基础(13) 狼人:
    一起谈.NET技术,基于TFS2010的代码审查环境部署 狼人:
    一起谈.NET技术,asp.net控件开发基础(23) 狼人:
    Flex中计算某个月有多少天
    showModelDialog的使用(一)
    HDU2309:ICPC Score Totalizer Software
    Windows XP下vs2010中配置OpenCV2.4.3
  • 原文地址:https://www.cnblogs.com/rohelm/p/2384086.html
Copyright © 2011-2022 走看看