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();
        }
    }

 

  

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

posted @ 2012-10-23 11:10  s_p  阅读(178)  评论(0编辑  收藏  举报