知识大全 .NET中的Event与Delegates
Posted 事件
篇首语:黑暗带来恐惧。知识可以点亮你,驱逐恐惧。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .NET中的Event与Delegates相关的知识,希望对你有一定的参考价值。
.NET中的Event与Delegates 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
今天复习了一下C#中的Delegates与Event Handler 整理一下思路如下 使用Delegates进行事件处理 一般遵循下面的模式 我们将事件的发起者(Event Source)称为Publisher 将事件的处理者(Event Handler)称为Subscriber 具体的做法 用一个简单的例子来看如何进行事件的封装处理! 鲨鱼正在网上潜水 突然他决定出门(Event) 他会有什么动作呢(Event Handler)? > 决定出门了 (一个外部调用 sharkMind DecideGetOut()) > 鲨鱼的脑子产生一些生物电 (一个事件激发了 OnGetOut) > 谁来做处理 丢给神经系统吧 (一个delegate要负责传递指令 GetOutEventHandler) > 具体如何做 当然是鲨鱼的身体啦 (sharkBody OpenDoor()) > 一个事件可能需要好几个动作处理哦 所以我需要 开门 放下东西 关门! 纵观一下整个事件的处理过程 filename: Program csclass Program static void Main(string[] args) //鲨鱼的脑袋 算是一个事件发起者 the Publisher GetOutPublisher sharkMind = new GetOutPublisher(); //鲨鱼的身体 算是一个事件处理者 the Subscriber GetOutSubscriber sharkBody = new GetOutSubscriber(); //建立鲨鱼的神经系统单元 GetOutEventHandler eventAction = new GetOutEventHandler(sharkBody OpenTheDoor); GetOutEventHandler eventAction = new GetOutEventHandler(sharkBody PutDownWhat); GetOutEventHandler eventAction = new GetOutEventHandler(sharkBody CloseTheDoor); //把鲨鱼的神经系统单元与脑子联系起来 即为将事件处理动作注册到事件委托中 sharkMind OnGetOutHandler += eventAction ; sharkMind OnGetOutHandler += eventAction ; sharkMind OnGetOutHandler += eventAction ; //外面天气不错 我决定出去走走 于是产生一系列的事件处理! sharkMind DecideGetOut();
剖析整个组成 先从delegate开始 为了能够封装事件 我们需要先定义一个delegatedelegate void GetOutEventHandler(Object source GetOutEventArgs e);
假定你的事件处理的时候 还需要传递一些参数 所以我们还需定义一个EventArgs 就算出门的时候带什么东西吧~~~ ^ ^! filename GetOutEventArgs csclass 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;
对应出去 我们就局限下面的响应动作了 filename GetOutSubscribe csclass 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 );
事件是如何产生的 filename GetOutPublisher cs 当有了上面的Publisher与Subscriber后 要把它们串起来 需要遵循下面的过程 Step 建立Publisher Instance 即Event Source Step 建立Subscriber Instance 即Event Handler Step 建立一个Delegate 来承接Subscriber的具体动作 Step 把建立的Delegate与Event进行绑定 我们称之为register Step 外部调用 产生Event 所有的Event Handler收到通知 开始执行 具体可以参考 中的主函数的步骤! 运行的结果如下: Open the door Put down Nothing Close the door cha138/Article/program/net/201311/12430相关参考
知识大全 Oracle数据库event事件与dump文件介绍
Oracle数据库event事件与dump文件介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
C#事件(Event)解析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 事件(event)这个
知识大全 关于innerHTML后丢失动态绑定的EVENT问题
关于innerHTML后丢失动态绑定的EVENT问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Turbine Howto 之 Action Event [译]
TurbineHowto之ActionEvent[译] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 MySQL事件调度器Event Scheduler详解
MySQL事件调度器EventScheduler详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
nullevent不是空事件不是没有等待事件而是Oracle忘记了刚才等待的事件的名字是什么了但保留了该事件的真实情况Oracle的开发人员直到才更新了这些事件名称 那是不是我们每当遇到性能
.NET泛型中的协变与逆变 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 当前NET语言如VB和
知识大全 .net ajax 与Ext2框架在.net程序中的应用
.netajax与Ext2框架在.net程序中的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
理解.NET泛型中的协变与逆变 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 当前NET语言如V
.NET中的日期与时间的解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在ASPNet一