欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#事件用法实例浅析

程序员文章站 2022-08-03 20:50:54
本文实例讲述了c#事件用法。分享给大家供大家参考。具体分析如下: eventhandler的定义如下 public delegate...

本文实例讲述了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#程序设计有所帮助。