玉祥平台客服-15087858732

标题: c#之事件 [打印本页]

作者: Adam丶鱼    时间: 2020-4-3 17:30
标题: c#之事件
本帖最后由 Adam丶鱼 于 2017-5-3 17:34 编辑

事件基于委托,可以为任何一种委托类型提供一种发布\订阅机制。
  使用event关键字将一个委托类型定义为事件。

  下面通过一个例子介绍事件:      //事件发布类
        public class PublishEvent
        {
            public delegate string Display(string str);
            public event Display DisplayEvent;
            //客户端代码通过调用这个方法触发事件
            public void Shows(string str)
            {
                if (DisplayEvent != null)
                {
                    DisplayEvent(str);
                }
            }
        }
        //事件侦听类,这个类订阅事件
        public class Listen1
        {
            public string MakeAlert(string str)
            {
                Console.WriteLine(str + "Listen1");
                return str + "Listen1";
            }
        }
        public class Listen2
        {
            public string ShowMsg(string str)
            {
                Console.WriteLine(str + "Listen2");
                return str + "Listen2";
            }
        }
   客户端代码:
            class Program
        {
            static void Main()
            {
                PublishEvent pe = new PublishEvent();
                Listen1 l1 =  new Listen1();
                Listen2 l2 = new Listen2();

                //变量l1和l2订阅了事件
                pe.DisplayEvent += l1.MakeAlert;
                pe.DisplayEvent += l2.ShowMsg;

                //触发事件
                pe.Shows("事件");
                Console.ReadKey();
            }
        }
事件就是一个特殊的委托(http://www.cnblogs.com/afei-24/p/6762442.html),它是一个用于事件驱动模型的专用委托.你可以在客户代码中直接调用委托来激发委托指向的函数,而事件不可以,事件的触发只能由服务代码自己触发。也就是说在你的代码里委托你不但可以安排谁是它的调用函数,还可以直接调用它,而事件不能直接调用,只能通过某些操作触发。除此之此,事件拥有委托的所有功能,包括多播特性。即事件可以有多个事件处理函数,委托同样也可以是个多播委托.
  事件是封装过的委托实例;委托是类型,事件是实例!
  EventHandler<TEventArgs>.NET自带的委托,也用于定义事件。






作者: Adam丶鱼    时间: 2020-4-3 17:35

作者: 张兴康    时间: 2020-4-3 17:37

作者: Adam丶鱼    时间: 2020-4-4 22:43
张兴康 发表于 2017-5-3 17:37


作者: caixuqad    时间: 2020-4-5 15:06

作者: 张兴康    时间: 2020-4-8 17:17
caixuqad 发表于 2017-5-5 15:06


作者: fteair    时间: 2020-4-9 11:23

作者: caixuqad    时间: 2020-4-10 18:07





欢迎光临 玉祥平台客服-15087858732 (http://bbs.delit.cn/) Powered by Discuz! X3.2