C#中的Delegates与Event Handler eventbus和handler
我们将事件的发起者(Event Source)称为Publisher,将事件的处理者(Event Handler)称为Subscriber.
2. 具体的做法,用一个简单的例子来看如何进行事件的封装处理!
鲨鱼正在网上潜水,突然他决定出门(Event),他会有什么动作呢(Event Handler)?
---> 决定出门了....(一个外部调用...sharkMind.DecideGetOut())
---> 鲨鱼的脑子产生一些生物电... (一个事件激发了... OnGetOut)
---> 谁来做处理,丢给神经系统吧...(一个delegate要负责传递指令....GetOutEventHandler)
---> 具体如何做,当然是鲨鱼的身体啦...(sharkBody.OpenDoor())
---> 一个事件可能需要好几个动作处理哦,所以我需要:开门,放下东西,关门!
2.1 纵观一下整个事件的处理过程...
filename: Program.cs
class Program {
static void Main(string[] args) {
//鲨鱼的脑袋,算是一个事件发起者,the Publisher.
GetOutPublisher sharkMind = new GetOutPublisher();
//鲨鱼的身体,算是一个事件处理者,the Subscriber.
GetOutSubscriber sharkBody = new GetOutSubscriber();
//建立鲨鱼的神经系统单元 软件开发网 www.mscto.com
GetOutEventHandler eventAction1 = new GetOutEventHandler(sharkBody.OpenTheDoor);
GetOutEventHandler eventAction2 = new GetOutEventHandler(sharkBody.PutDownWhat);
GetOutEventHandler eventAction3 = new GetOutEventHandler(sharkBody.CloseTheDoor);
//把鲨鱼的神经系统单元与脑子联系起来, 即为将事件处理动作注册到事件委托中.
sharkMind.OnGetOutHandler += eventAction1;
sharkMind.OnGetOutHandler += eventAction2;
sharkMind.OnGetOutHandler += eventAction3;
//外面天气不错,我决定出去走走,于是产生一系列的事件处理!
sharkMind.DecideGetOut();
}
}
2.2 剖析整个组成...先从delegate开始,为了能够封装事件,我们需要先定义一个delegate:
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());
}
}
更多阅读
转载 幼儿手工作品在幼儿园环境创设中的作用与运用 幼儿园环境创设方案
原文地址:幼儿手工作品在幼儿园环境创设中的作用与运用作者:coleen幼儿手工作品在幼儿园环境创设中的作用与运用【摘要】环境创设是幼儿园教育教学的重要组成部分,对幼儿的身心发展有着重要的影响。目前幼儿园的环境创设存在着很多问
试论精益生产方式在制造企业中的作用与应用 精益制造系列 pdf
试论精益生产方式在制造企业中的作用与应用[内容 提 要]本文简要阐述了精益生产的基本观念与核心要求,精益生产是企业提高自身竞争力,赢得更多竞争优势的重要方法。精益生产的核心理念,是只做有价值的工作,并且能快速应对市场的需求。
我哥的毕业论文《财务管理在企业管理中的地位与作用》 财务管理毕业论文网
财务管理在企业管理中的地位与作用【摘要】企业管理包括日常经营管理和前瞻性的战略管理,是对企业人、财、物全方位的综合管理,财务管理是企业管理的重要组成部分,它在企业日常经营管理中处于分配地位和理财地位,在企业前瞻性的战略管
IOS开发_objective-c中的OOP_灵隐__ objective c 开发工具
objective-c中的OOP其实,objective-c本质上就是C语言。首先解释一个简单的小程序。1.入门Hello程序解析。#import<Foundation/Foundation.h> int main(int argc,const char *argv[]){ NSlog(@"Everyone has some helloworlds."); ret
模拟c++中的strstr函数 c语言中strstr函数
/************************************************************************//* 例子:请写出一个函数来模拟c++中的strstr函数:该函数的返回值是主传中字符子串的位置以后的所有字符,请不要使用任何c程序已有的函数函数名: strstr函