1.定义
事件可以在某个类或对象发生一些事情时,通知其他类或对象。
比如Button控件,当我们绑定click事件后,点击按钮,就会触发对应的方法。
发送/触发事件的类叫做发布者(Publisher),接收/处理事件的类叫做订阅者(Subscribers)。
2.简单实现
有这样一个场景,当发布者添加新的汽车信息时,订阅者可以收到新消息的通知:
下面创建两个类:CarDealer (发布者)和 Consumer (订阅者)
public class CarInfoEventArgs: EventArgs
{
public CarInfoEventArgs(string name)
{
this.Car = name;
}
public string Car { get; private set; }
}
public class CarDealer
{
public event EventHandler<CarInfoEventArgs> CarInfoEvent;
public void NewCar(string car)
{
Console.WriteLine("New Car is {0}", car);
RaiseConsumerEvent(new CarInfoEventArgs(car));
}
private void RaiseConsumerEvent(CarInfoEventArgs e)
{
CarInfoEvent(this, e);
}
}
public class Consumer
{
public Consumer(string name)
{
this.Name = name;
}
public string Name { get; private set; }
public void HandleCarInfo(object sender, CarInfoEventArgs e)
{
Console.WriteLine("{0}: New Car is {1}", Name, e.Car);
}
}
然后,在Main函数里面声明调用
var carDealer = new CarDealer();
var Tom = new Consumer("Tom");
carDealer.CarInfoEvent += Tom.HandleCarInfo;
carDealer.NewCar("Mecerdes");
运行结果:
New Car is Mecerdes
Tom: New Car is Mecerdes
New Car is Mazda
Tom: New Car is Mazda
Jerry: New Car is Mazda
New Car is ferrari
Jerry: New Car is ferrari
第一次Tom订阅了,Tom收到消息,第二次增加了Jerry订阅,所以它们两都收到了消息,第三次Tom取消了订阅,只有Jerry收到了消息。