#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";
}
}
}
2009年9月30日星期三
一个演示自定义事件(event)的完整例子。
类Car中包含车的制造厂商CarMake,型号CarModel,日期CarYear,车主CarOwner。在这个类中,我们想自定义一个OwnerChanged事件,每当车主CarOwner改变的时候,自动发生这个车主变更事件。COSTOM_PARAM是个预定义开关,演示了两种实现模式,主要是是否用EventHandler这个系统定义好的的代理(delegate)还是自定义代理事件的区别。两种情况编译执行后都会在屏幕上输出:lin-lei这个字符串。
订阅:
博文评论 (Atom)
没有评论:
发表评论