扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年9月10日
关键字: 编程
鲨鱼正在网上潜水,突然他决定出门(Event),他会有什么动作呢(Event Handler)? ---> 决定出门了....(一个外部调用...sharkMind.DecideGetOut()) ---> 鲨鱼的脑子产生一些生物电... (一个事件激发了... OnGetOut) ---> 谁来做处理,丢给神经系统吧...(一个delegate要负责传递指令....GetOutEventHandler) ---> 具体如何做,当然是鲨鱼的身体啦...(sharkBody.OpenDoor()) ---> 一个事件可能需要好几个动作处理哦,所以我需要:开门,放下东西,关门! |
filename: Program.cs |
|
delegate void GetOutEventHandler(Object source, GetOutEventArgs e);2.3 假定你的事件处理的时候,还需要传递一些参数,所以我们还需定义一个EventArgs,
就算出门的时候带什么东西吧~~~ ^ ^!
filename:GetOutEventArgs.cs
class GetOutEventArgs : System.EventArgs {
// 出门带啥东西呢?
private string _takeWhat;
public GetOutEventArgs() {
this._takeWhat = "Nothing";
}
public GetOutEventArgs(string strTakeWhat) {
if (strTakeWhat.Equals("")) {
this._takeWhat = "Nothing";
} else {
this._takeWhat = strTakeWhat;
}
}
public string TakeWhat {
get {
return _takeWhat;
}
set {
_takeWhat = value;
}
}
}
2.4 对应出去,我们就局限下面的响应动作了:
filename:GetOutSubscribe.cs
class GetOutSubscriber {
public void OpenTheDoor(Object source, GetOutEventArgs e) {
// 开门...
Console.WriteLine("Open the door...");
}
public void PutDownWhat(Object source, GetOutEventArgs e) {
// 放下手中的东西...
Console.WriteLine("Put down " + e.TakeWhat + "...");
}
public void CloseTheDoor(Object source, GetOutEventArgs e) {
// 关门...
Console.WriteLine("Close the door...");
}
}
2.5 事件是如何产生的
filename:GetOutPublisher.cs
class GetOutPublisher {
//Publisher 说:喂,我有一个事件,谁来处理?
public event GetOutEventHandler OnGetOutHandler;
//Publisher 产生具体的事件
protected void OnGetOut(GetOutEventArgs e) {
//有谁来负责处理事件吗?
if (null != this.OnGetOutHandler) {
//让他们来处理吧...
OnGetOutHandler(this, e);
}
}
//对外公开的接口,调用此方法会产生事件.
public void DecideGetOut() {
OnGetOut(new GetOutEventArgs());
}
}
2.6 当有了上面的Publisher与Subscriber后,要把它们串起来,需要遵循下面的过程:
Step 1:建立Publisher Instance,即Event Source
Step 2:建立Subscriber Instance,即Event Handler
Step 3:建立一个Delegate,来承接Subscriber的具体动作
Step 4:把建立的Delegate与Event进行绑定,我们称之为register
Step 5:外部调用,产生Event,所有的Event Handler收到通知,开始执行
具体可以参考2.1中的主函数的步骤!
2.7 运行的结果如下:
Open the door...
Put down Nothing...
Close the door...
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者