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#,事件
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
mybatis-plus之如何实现in嵌套sql
2023-02-11 14:57:57
教你如何使用Java实现WebSocket
2021-08-22 20:39:02
![](https://img.aspxhome.com/file/2023/2/94372_0s.png)
Android so的热升级尝试
2023-08-07 22:41:59
![](https://img.aspxhome.com/file/2023/0/110740_0s.jpg)
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
![](https://img.aspxhome.com/file/2023/0/94240_0s.png)
Java浅析枚举类的使用
2023-11-10 14:12:58
![](https://img.aspxhome.com/file/2023/6/104696_0s.png)
Java可重入锁的实现原理与应用场景
2023-03-27 20:21:54
关于java关键字this和super的区别和理解
2022-08-01 14:33:09
![](https://img.aspxhome.com/file/2023/2/63052_0s.png)
Spring Boot Actuator监控端点小结
2023-02-15 05:04:23
![](https://img.aspxhome.com/file/2023/3/72593_0s.png)
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
![](https://img.aspxhome.com/file/2023/3/77093_0s.png)
Java求两集合中元素交集的四种方法对比分析
2023-08-23 09:24:56