2009年9月30日星期三

一个演示自定义事件(event)的完整例子。

类Car中包含车的制造厂商CarMake,型号CarModel,日期CarYear,车主CarOwner。在这个类中,我们想自定义一个OwnerChanged事件,每当车主CarOwner改变的时候,自动发生这个车主变更事件。COSTOM_PARAM是个预定义开关,演示了两种实现模式,主要是是否用EventHandler这个系统定义好的的代理(delegate)还是自定义代理事件的区别。两种情况编译执行后都会在屏幕上输出:lin-lei这个字符串。

#undef COSTOM_PARAM //
using System;
namespace CustomEvents
{


public class Car
{
#if COSTOM_PARAM
public delegate void OwnerChangedEventHandler(string newOwner);
public event OwnerChangedEventHandler OwnerChanged;
#else

public event EventHandler OwnerChanged;
#endif

private string make;
private string model;
private int year;
private string owner;

public string CarMake
{
get { return this.make; }
set { this.make = value; }
}

public string CarModel
{
get { return this.model; }
set { this.model = value; }
}

public int CarYear
{
get { return this.year; }
set { this.year = value; }
}

public string CarOwner
{
get { return this.owner; }
set
{
this.owner = value;
if (this.OwnerChanged != null)
#if COSTOM_PARAM
this.OwnerChanged(value);
#else
this.OwnerChanged(this, new EventArgs());
#endif
}
}

public Car()
{
}
}

public class Test
{
#if COSTOM_PARAM
public static void car_OwnerChanged(string v)
{
//the CarOwner property has been modified
Console.WriteLine(v);
}
#else
public static void car_OwnerChanged(object sender, EventArgs e)
{
//the CarOwner property has been modified
Console.WriteLine(((Car)sender).CarOwner);
}
#endif

public static void Main()
{
Car car = new Car();

//adds an event handler to the OwnerChanged event
#if COSTOM_PARAM
car.OwnerChanged += new Car.OwnerChangedEventHandler(car_OwnerChanged);
#else
car.OwnerChanged += new EventHandler(car_OwnerChanged);
#endif
//setting this will fire the OwnerChanged event
car.CarOwner = "lin-lei";
}
}
}

没有评论:

发表评论