C#事件用法实例浅析
作者:永远爱好写程序 时间:2023-02-24 19:22:16
本文实例讲述了C#事件用法。分享给大家供大家参考。具体分析如下:
EventHandler<TEventArgs>的定义如下
public delegate void EventHandler<TEventArgs>(object sender,TEventArgs e) where TEventArgs:EventArgs
第一个参数必须是object类型(是一个对象,包含事件的发送者)
第二个参数是T类型(即泛型),定义了一个T的约束,它必须派生自基类EventArgs
CardInfoEventArgs 就派生自基类EventArgs
举例
#region 测试事件1
//EventArgs类
public class CardInfoEventArgs : EventArgs
{
public string Car { get; private set; }
public CardInfoEventArgs(string car)
{
this.Car = car;
}
}
//触发事件的类
public class CarDealer
{
public event EventHandler<CardInfoEventArgs> NewCardInfo;
public void NewCar(string car)
{
Console.WriteLine("CarDealer,new car{0}", car);
//在触发事件之前,需要检查委托NewCardInfo是否不为空。
//如果没有订阅处理程序,委托就是空
if (NewCardInfo != null)
{
NewCardInfo(this, new CardInfoEventArgs(car));
}
}
}
//处理事件的类
public class Consumer
{
private string name;
public Consumer(string name)
{
this.name = name;
}
//处理事件的方法
public void NewCarIsHere(object sender, CardInfoEventArgs e)
{
Console.WriteLine("{0}:car {1} is new", name, e.Car);
}
}
#endregion
private void button_测试事件1_Click(object sender, EventArgs e)
{
CarDealer dealer = new CarDealer();
Consumer michael = new Consumer("Michael");
dealer.NewCardInfo += michael.NewCarIsHere; //订阅事件
dealer.NewCar("宝马");
Consumer nick = new Consumer("Nick");
dealer.NewCardInfo += nick.NewCarIsHere; //订阅事件
dealer.NewCar("奔驰");
dealer.NewCardInfo -= michael.NewCarIsHere; //取消订阅事件
dealer.NewCar("奥迪");
}
测试结果截图
希望本文所述对大家的C#程序设计有所帮助。
标签:C#,事件
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
IntelliJ IDEA2022.3 springboot 热部署含静态文件(最新推荐)
2023-07-07 10:41:58
![](https://img.aspxhome.com/file/2023/6/86776_0s.jpg)
IDEA中设置代码自动提示为Alt+/的具体做法
2022-07-06 14:58:32
![](https://img.aspxhome.com/file/2023/9/69889_0s.jpg)
java实现递归菜单树
2023-02-01 00:03:06
Android自定义弹窗提示效果
2022-05-13 12:00:14
![](https://img.aspxhome.com/file/2023/6/101826_0s.jpg)
java性能优化之编译器版本与平台对应关系
2023-09-04 18:31:48
解决Spring Batch框架job任务只跑一次的问题
2023-01-07 00:13:53
android工程下不能运行java main程序的解决方法
2023-06-23 21:54:08
java实现队列数据结构代码详解
2023-06-20 15:35:47
C#中常使用进度条的代码
2021-06-27 23:31:18
idea离线使用jrebel的超详细教程
2022-05-18 10:01:27
![](https://img.aspxhome.com/file/2023/4/97964_0s.png)
解析Android 8.1平台SystemUI 导航栏加载流程
2023-06-23 15:21:21
SpringBoot如何自动生成API文档详解
2023-05-24 13:44:37
![](https://img.aspxhome.com/file/2023/9/90969_0s.png)
spring解决循环依赖的方案示例
2021-11-19 03:31:04
![](https://img.aspxhome.com/file/2023/8/68018_0s.png)
Unity3D动态对象优化代码分享
2023-12-22 09:38:24
Android TextView中文字通过SpannableString设置属性用法示例
2023-07-26 07:11:51
![](https://img.aspxhome.com/file/2023/8/84748_0s.jpg)
图文详解Java中的字节输入与输出流
2022-12-23 23:14:48
![](https://img.aspxhome.com/file/2023/4/81884_0s.jpg)
详解Java8 CompletableFuture的并行处理用法
2023-07-27 11:48:06
![](https://img.aspxhome.com/file/2023/8/77388_0s.png)
Java编程计算兔子生兔子的问题
2023-08-01 15:24:37
C#设计模式之外观模式介绍
2023-03-15 06:22:31
![](https://img.aspxhome.com/file/2023/5/68645_0s.jpg)
Android compose气泡升起和水滴下坠动画实现示例
2023-04-09 01:52:22
![](https://img.aspxhome.com/file/2023/4/96764_0s.gif)