.net 基础之事件
C# 事件
使用情况 : 如果某个对象的发生了特定的事情——其他的一个或者多个对象想知道这个对象发生的特定事情的情况 好 我们这个情况下就可以使用事件
那么什么样的类型能够监听那个特定的事件呢
I 我们都知道事件是基于委托的。委托是一种能够调用回调方法的一种类型安全的方式。委托还能够回调多个方法。
事件是对委托的封装。这样通过委托,对象就能够通过回调的方式来实现事件的订阅。事件通过委托维护了一个已登记的方法列表。
II 那么订阅者要有什么样的能力呢
1. 是要有一个事件封装的委托想对应的方法。
2. 这个方法能够登记和注销对事件的关注。
3. 当事件发生的时候能够收到通知。
打个比方说tom和Jhon都到一个汽车店去买奥迪A8 (没人的汽车的制造厂的要求还是不一样的)但是吧这种汽车还没有到货。老板就说这样吧,等汽车来的时候我们回通知您的。
I 定义类型来容纳需要发送给接收者的事件信息。
public class CarInfoEventArgs : EventArgs { private readonly string carFactory;//汽车的制造工厂 private readonly string carName;//汽车的名字 public CarInfoEventArgs(string factory,string name) { carFactory = factory; carName = name; } public string CarFactory{get{return carFactory;}} public string CarName{get{return carName;}} }
当事件发生的时候,事件的发生着可能要向事件的监听者传递一些信息。
II 定义事件成员
internal class CarShop { public event EventHanlder<CarInfoEventArgs> NewCar; }
1. 定义了事件的名称NewCar 2. 这个事件的类型是 EventHanlder<CarInfoEventArgs> 那么监听者的类型定义中就要有一个方法和这个委托的签名向对应
public delegate void EventHanlder<TEventArgs>(Object sender,TEventArgs e) where TEventArgs:EventArgs
III 定义负责引发事件的方法来通知事件的登记对象
定义一个受保护的虚方法来引发事件
protected virtual void OnNewCar(CarInfoEventArgs e) { if(NewCar != null) NewCar(this,e); }
IV 定义方法将输入转化为期望的事件
假设新的车辆到达这个店的时候我们使用一个方法来模仿这个过程
public void NewCarCome(string carfactory,string carName) { CarInfoEventArgs e = new (carfactory,carName); OnNewCar(e) }
V 定义监听者类型
public sealed class Tom { public Tom(CarShop shop) { shop.NewCar += ListenCarCome; } private void ListenCarCome(Object sender,CarInfoEventArgs e) { if(e.CarFactory == "beijing" && e.CarName=="aodi") Console.WriteLine("I will buy"); else Console.WriteLine("the car is not from beijing I will not buy it"); }
}
在这个类中还是要定义一个方法的用来取消对事件的监听
public void UnRegister(CarShop shop) { shop.NewCar -= ListenCarCome; }
这样我们在嗲用的时候就比较简单了
public void main() { CarShop shop = new CarShop(); Tom tom = new Tom(shop); shop.NewCarCome("beijing","aodi"); }
我知道这还有好多要改造的地方 供自己学习使用
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。