• .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);
            }
        }
    }
  • 相关阅读:
    shell的随机数
    centos7 安装install_mysql5.7网络教程安装_无报错.sh
    关于所有运动框架总结
    仅一年工作经验成功跳槽字节跳动,腾讯并拿到字节的offer,全靠这份面经!
    面试必看!花了三天整理出来的并发编程的锁及内存模型,看完你就明白了!
    新鲜出炉!花了三天整理的JVM复习知识点,面试突击必备!
    深度分析!面试99%被问到的多线程和并发篇,看完你就懂了
    去年去阿里面试,被问到ArrayList和LinkedList,我是这样回答的!
    深度分析:面试阿里,字节99%会被问到Java类加载机制和类加载器
    深度分析:Java并发编程之线程池技术,看完面试这个再也不慌了!
  • 原文地址:https://www.cnblogs.com/rohelm/p/2384086.html
Copyright © 2020-2023  润新知