zoukankan      html  css  js  c++  java
  • Delegate Event

        public delegate void tspEventHander();
        //delegate 是关键词,【注:EventHandler是一个声明委托的微软C#的命名标准,我的习惯是标准就要第一时间说,也就这个命名习惯要第一时间养成】
    
        // public void BugTickEventHandler() { 方法体}
        // 区别知道了吧,在现实生活中,委托只是个命令,做事情是别人,而在程序世界里委托只是存储了各个方法的地址(方法的容器)。
    
        public class tsp
        {
            public static void BuyTicket()
            {
                Console.WriteLine("tsp,申明了委托就自然要想到委托对应的方法(委托是方法的容易嘛)!");
            }
            public static void BuyMovieTicket()
            {
                Console.WriteLine("t_sp,申明委托的时候后面记得加上EventHander,这个是标准的命名规范!");
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                tspEventHander sp = new tspEventHander(tsp.BuyTicket);
                sp += tsp.BuyMovieTicket;
                sp();
    
                tspEventHander sp1 = new tspEventHander(delegate() { Console.WriteLine("你好啊我是匿名委托方法"); });
                sp1();
    
                tspEventHander sp2 = new tspEventHander(()=>Console.WriteLine("你好啊我是lambda"));
                sp2();
                Console.ReadKey();
            }
        }
    

      Event:

        class Program
        {
            /*事件的发生一般都牵扯2个角色
              事件发行者(Publisher):一个事件的发行者,也称作是发送者(sender),其实就是个对象,这个对象会自行维护本身的状态信息,当本身状态信息变动时,便触发一个事件,并通知说有的事件订阅者。
              事件订阅者(Subscriber):对事件感兴趣的对象,也称为Receiver,可以注册感兴趣的事件,在事件发行者触发一个事件后,会自动执行这段代码。*/
            public class Publisher
            {
                //声明一个出版的委托
                public delegate void PublisherEventHandler();
                //在委托的机制下我们建立以个出版事件
                public event PublisherEventHandler Onpublisher;
    
                public void Issue()
                {
                    if (Onpublisher!=null)
                    {
                       Console.WriteLine("我想你了你确不知道,我把我的思念寄托在xx可得到是NULL");
                        Onpublisher();
                    }
                }
            }
    
            //订阅者
            public class Mrtsp
            {
                //对事件感兴趣的事情,这里指对发布者感兴趣
                public static void Receive()
                {
                    Console.WriteLine("我是tsp!");
                }
            }
    
            //订阅者,悲情人物t_sp
            public class Mrt_sp
            {
                //对事件感兴趣的事情
                public static void Receive()
                {
                    Console.WriteLine("你不知道的事情 学习的东西好多 可精通的没多少 哎!");
                }
            }
    
            static void Main(string[] args)
            {
                Publisher pub = new Publisher();
                pub.Onpublisher += new Publisher.PublisherEventHandler(Mrtsp.Receive);
    
                //另一种事件注册方式
                pub.Onpublisher +=Mrt_sp .Receive;
    
                pub.Issue();
                Console.ReadKey();
            }
        }
    

    上面Event:+=应该放到对象注册类 内部 这样才能体现封装对应修改代码:

        class Program
        {
            /*事件的发生一般都牵扯2个角色
              事件发行者(Publisher):一个事件的发行者,也称作是发送者(sender),其实就是个对象,这个对象会自行维护本身的状态信息,当本身状态信息变动时,便触发一个事件,并通知说有的事件订阅者。
              事件订阅者(Subscriber):对事件感兴趣的对象,也称为Receiver,可以注册感兴趣的事件,在事件发行者触发一个事件后,会自动执行这段代码。*/
            public class Publisher
            {
                //声明一个出版的委托
                public delegate void PublisherEventHandler();
                //在委托的机制下我们建立以个出版事件
                public event PublisherEventHandler Onpublisher;
    
                public void Issue()
                {
                    if (Onpublisher != null)
                    {
                        Console.WriteLine("我想你了你确不知道,我把我的思念寄托在xx可得到是NULL");
                        Onpublisher();
                    }
                }
            }
    
            //订阅者
            public class MrtspReceiver
            {
                //对事件感兴趣的事情,这里指对发布者感兴趣
                public MrtspReceiver(Publisher publisher)
                {
                    //产生一个委托实例并添加到PublisherEventHandler产生的事件列表中
                    publisher.Onpublisher += new Publisher.PublisherEventHandler(Receive);
                }
                //事件处理函数
                public static void Receive()
                {
                    Console.WriteLine("我是tsp!");
                }
            }
    
            //订阅者,悲情人物t_sp
            public class Mrt_spReceiver
            {
                //对事件感兴趣的事情,这里指对发布者感兴趣
                public Mrt_spReceiver(Publisher publisher)
                {
                    //产生一个委托实例并添加到PublisherEventHandler产生的事件列表中
                    publisher.Onpublisher += new Publisher.PublisherEventHandler(Receive);
                }
    
                //事件处理函数
                public static void Receive()
                {
                    Console.WriteLine("你不知道的事情 学习的东西好多 可精通的没多少 哎!");
                }
            }
    
            static void Main(string[] args)
            {
                //实例化一个事件发送方
                Publisher publisher = new Publisher();
    
                //实例化一个事件接收方
                Mrt_spReceiver eventReceiver = new Mrt_spReceiver(publisher);
                MrtspReceiver Mrtsp = new MrtspReceiver(publisher);
    
                publisher.Issue();
                Console.ReadKey();
            }
        }

      

    总结:委托就是方法的容器  事件就是委托的约束 

  • 相关阅读:
    18.VUE学习之-v-for操作对象与数值
    17.VUE学习之- v-for指令的使用方法
    16.VUE学习之-v-show的使用与v-if的差异对比
    Ubuntu系统操作
    虚拟机乌班图系统安装 VMware tools 工具
    ubuntu中如何切换普通用户、root用户
    在Ubuntu18.04安装docker之后,以登陆用户身份执行docker pull jenkins,报错:connect: permission denied
    安装VM-TOOLS,解压tar包时提示目录磁盘空间不足
    超详细的VMware安装ubuntu教程
    如何快速下载ubuntu镜像
  • 原文地址:https://www.cnblogs.com/y112102/p/2735144.html
Copyright © 2011-2022 走看看