C#事件用法实例浅析

 更新时间:2015年05月16日 12:01:54   作者:永远爱好写程序  
这篇文章主要介绍了C#事件用法,以实例形式分析了C#中事件的定义、触发及处理相关技巧,需要的朋友可以参考下

本文实例讲述了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#集合快速排序类实现代码分享

    这篇文章主要介绍了C#实现集合排序类,大家参考使用吧
    2013-12-12
  • C# HttpClient上传文件并附带其它参数方式

    C# HttpClient上传文件并附带其它参数方式

    这篇文章主要介绍了C# HttpClient上传文件并附带其它参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 详解LINQ入门(上篇)

    详解LINQ入门(上篇)

    这篇文章主要介绍了详解LINQ入门(上篇),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • c#中虚函数的相关使用方法

    c#中虚函数的相关使用方法

    若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法。
    2013-02-02
  • C#实现顺序栈和链栈的代码实例

    C#实现顺序栈和链栈的代码实例

    今天小编就为大家分享一篇关于的C#实现顺序栈和链栈的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 基于WPF实现面包屑控件的示例代码

    基于WPF实现面包屑控件的示例代码

    这篇文章主要为大家详细介绍了如何基于WPF实现简单的面包屑控件,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下
    2023-05-05
  • C#多线程编程中的锁系统基本用法

    C#多线程编程中的锁系统基本用法

    这篇文章主要介绍了C#多线程编程中的锁系统基本用法,本文讲解了lock、Monitor、mutex、Semaphore等内容,需要的朋友可以参考下
    2015-04-04
  • C#动态加载组件后如何在开发环境中调试详解

    C#动态加载组件后如何在开发环境中调试详解

    这篇文章主要给大家介绍了关于C#动态加载组件后如何在开发环境中调试的相关资料,文中通过图文介绍的非常详细,对大家的学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • C#生成漂亮验证码完整代码类

    C#生成漂亮验证码完整代码类

    本文主要介绍了C#生成漂亮验证码的完整代码类。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • C#实现判断操作系统是否为Win8以上版本

    C#实现判断操作系统是否为Win8以上版本

    这篇文章主要介绍了C#实现判断操作系统是否为Win8以上版本,本文讲解了利用C#获取OS的版本号、利用反射获取当前正在运行的程序的版本信息、 利用C#判断当前操作系统是否为Win8系统等内容,需要的朋友可以参考下
    2015-06-06

最新评论