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#程序设计有所帮助。

标签:C#,事件
0
投稿

猜你喜欢

  • IntelliJ IDEA2022.3 springboot 热部署含静态文件(最新推荐)

    2023-07-07 10:41:58
  • IDEA中设置代码自动提示为Alt+/的具体做法

    2022-07-06 14:58:32
  • java实现递归菜单树

    2023-02-01 00:03:06
  • Android自定义弹窗提示效果

    2022-05-13 12:00:14
  • 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
  • 解析Android 8.1平台SystemUI 导航栏加载流程

    2023-06-23 15:21:21
  • SpringBoot如何自动生成API文档详解

    2023-05-24 13:44:37
  • spring解决循环依赖的方案示例

    2021-11-19 03:31:04
  • Unity3D动态对象优化代码分享

    2023-12-22 09:38:24
  • Android TextView中文字通过SpannableString设置属性用法示例

    2023-07-26 07:11:51
  • 图文详解Java中的字节输入与输出流

    2022-12-23 23:14:48
  • 详解Java8 CompletableFuture的并行处理用法

    2023-07-27 11:48:06
  • Java编程计算兔子生兔子的问题

    2023-08-01 15:24:37
  • C#设计模式之外观模式介绍

    2023-03-15 06:22:31
  • Android compose气泡升起和水滴下坠动画实现示例

    2023-04-09 01:52:22
  • asp之家 软件编程 m.aspxhome.com