c#之事件用法

作者:Ruby_Lu 时间:2023-09-22 05:05:28 

事件基于委托,可以为任何一种委托类型提供一种发布\订阅机制。
使用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();

}
       }

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

来源:https://www.cnblogs.com/afei-24/p/6801637.html

标签:c#,事件
0
投稿

猜你喜欢

  • mybatis-plus之如何实现in嵌套sql

    2023-02-11 14:57:57
  • 教你如何使用Java实现WebSocket

    2021-08-22 20:39:02
  • Android so的热升级尝试

    2023-08-07 22:41:59
  • C#中的char与string详解

    2023-09-13 07:07:27
  • C# 将 Stream 保存到文件的方法

    2021-10-13 12:47:59
  • c#使用Dataset读取XML文件动态生成菜单的方法

    2022-07-14 22:52:20
  • 详解Spring Bean 之间的特殊关系

    2022-10-25 21:12:17
  • C#利用System.Threading.Thread.Sleep即时输出信息的详解

    2021-07-08 02:35:15
  • Android 获取 usb 权限的两种方法

    2022-01-06 14:37:06
  • Java浅析枚举类的使用

    2023-11-10 14:12:58
  • Java可重入锁的实现原理与应用场景

    2023-03-27 20:21:54
  • 关于java关键字this和super的区别和理解

    2022-08-01 14:33:09
  • Spring Boot Actuator监控端点小结

    2023-02-15 05:04:23
  • android 获取视频,图片缩略图的具体实现

    2023-07-28 00:20:39
  • Android基础之startActivityForResult()的用法详解

    2022-05-28 03:37:29
  • Spring Cloud之配置中心的搭建

    2023-04-02 21:19:49
  • java集合求和最大值最小值示例分享

    2022-10-11 04:15:10
  • 浅谈JVM中的JOL

    2022-10-06 15:44:49
  • Java/Web调用Hadoop进行MapReduce示例代码

    2023-09-01 05:05:50
  • Java求两集合中元素交集的四种方法对比分析

    2023-08-23 09:24:56
  • asp之家 软件编程 m.aspxhome.com