C#中的Delegates与Event Handler
来源:互联网 发布:淘宝网严重违规b48分 编辑:程序博客网 时间:2024/05/01 01:32
C#中的Delegates与Event Handler
我们将事件的发起者(Event Source)称为Publisher,将事件的处理者(Event Handler)称为Subscriber.
2. 具体的做法,用一个简单的例子来看如何进行事件的封装处理!
鲨鱼正在网上潜水,突然他决定出门(Event),他会有什么动作呢(Event Handler)?
---> 决定出门了....(一个外部调用...sharkMind.DecideGetOut())
---> 鲨鱼的脑子产生一些生物电... (一个事件激发了... OnGetOut)
---> 谁来做处理,丢给神经系统吧...(一个delegate要负责传递指令....GetOutEventHandler)
---> 具体如何做,当然是鲨鱼的身体啦...(sharkBody.OpenDoor())
---> 一个事件可能需要好几个动作处理哦,所以我需要:开门,放下东西,关门!
2.1 纵观一下整个事件的处理过程...
filename: Program.cs
2.2 剖析整个组成...先从delegate开始,为了能够封装事件,我们需要先定义一个delegate:
就算出门的时候带什么东西吧~~~ ^ ^!
filename:GetOutEventArgs.cs
2.4 对应出去,我们就局限下面的响应动作了:
filename:GetOutSubscribe.cs
2.5 事件是如何产生的
filename:GetOutPublisher.cs
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...
1. 使用Delegates进行事件处理,一般遵循下面的模式:
我们将事件的发起者(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()); } }
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...
posted on 2011-04-21 19:47 huangyi5209 阅读(136) 评论(0) 编辑 收藏引用 所属分类: C#
0 0
- C#中的Delegates与Event Handler
- 学习 ExtendedWebBrowser2 (2) C#中的Delegates与Event Handler (1)
- 学习 ExtendedWebBrowser2 (2) C#中的Delegates与Event Handler (2)
- .NET中的Event与Delegates
- .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
- .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
- .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
- .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
- C#中的delegate 与event(一)
- C#中的delegate与event简单讲解
- C#中的Event
- C#中的Event
- C#中的Event
- C#中的Event
- Delegates in C#
- C# events vs. delegates
- Understanding Delegates in C#
- C# - Demystifying Delegates
- 10 个很有用的 HTML5 和 CSS3 生成器资源
- Thread死锁问题
- [洛谷P1339]热浪
- 生成验证码
- HttpURLConnection用法详解
- C#中的Delegates与Event Handler
- HLK测试中安装Application verifier 后遇到的问题
- JSON_笔记
- HDU 5833 Zhu and 772002 (高斯消元)
- 汉字字母数字排序
- CCF201604-1 折点计数解答
- 【985系列】985的0-1串难题
- 史上最详细Windows版本搭建安装React Native环境配置
- 解决ugui穿透ui点击到游戏对象上的问题