zoukankan      html  css  js  c++  java
  • C#之事件

      事件基于委托,可以为任何一种委托类型提供一种发布订阅机制。
      使用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自带的委托,也用于定义事件。(可以去MSDN研究)

  • 相关阅读:
    客户端回传事件接口IPostBackEventHandler
    《敏捷无敌》—— 一本非常好看的“IT技术言情小说”
    面向对象之设计
    Zac谈网络编辑需要注意的SEO技巧
    面向对象之领悟
    《网络营销实战密码》推荐
    设计模式建造者模式(builder)
    设计模式工厂方法(FactoryMethod)
    struts1.x与struts2的比较表
    设计模式原型模式(ProtoType)
  • 原文地址:https://www.cnblogs.com/afei-24/p/6801637.html
Copyright © 2011-2022 走看看