软件开发网 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#