1. 浣跨敤Delegates榪涜浜嬩歡澶勭悊錛屼竴鑸伒寰笅闈㈢殑妯″紡錛?/span>
鎴戜滑灝嗕簨浠剁殑鍙戣搗鑰?Event Source)縐頒負(fù)Publisher錛屽皢浜嬩歡鐨勫鐞嗚?Event Handler)縐頒負(fù)Subscriber.

2. 鍏蜂綋鐨勫仛娉曪紝鐢ㄤ竴涓畝鍗曠殑渚嬪瓙鏉ョ湅濡備綍榪涜浜嬩歡鐨勫皝瑁呭鐞嗭紒
椴ㄩ奔姝e湪緗戜笂娼滄按錛岀獊鐒朵粬鍐沖畾鍑洪棬(Event)錛屼粬浼?xì)鏈変粈涔堝姩浣滃憿(Event Handler)錛?br> ---> 鍐沖畾鍑洪棬浜?...錛堜竴涓閮ㄨ皟鐢?..sharkMind.DecideGetOut()錛?br> ---> 椴ㄩ奔鐨勮剳瀛愪駭鐢熶竴浜涚敓鐗╃數(shù)... 錛堜竴涓簨浠舵縺鍙戜簡(jiǎn)... OnGetOut錛?br> ---> 璋佹潵鍋氬鐞嗭紝涓㈢粰紲炵粡緋葷粺鍚?..錛堜竴涓猟elegate瑕佽礋璐d紶閫掓寚浠?...GetOutEventHandler錛?
---> 鍏蜂綋濡備綍鍋氾紝褰撶劧鏄波楸肩殑韜綋鍟?..錛坰harkBody.OpenDoor()錛?br> ---> 涓涓簨浠跺彲鑳介渶瑕佸ソ鍑犱釜鍔ㄤ綔澶勭悊鍝︼紝鎵浠ユ垜闇瑕侊細(xì)寮闂紝鏀句笅涓滆タ錛屽叧闂紒
|
2.1 綰佃涓涓嬫暣涓簨浠剁殑澶勭悊榪囩▼...
filename: Program.cs |
class Program { static void Main(string[] args) { //椴ㄩ奔鐨勮剳琚嬶紝綆楁槸涓涓簨浠跺彂璧瘋(gè)咃紝the Publisher. GetOutPublisher sharkMind = new GetOutPublisher();
//椴ㄩ奔鐨勮韓浣擄紝綆楁槸涓涓簨浠跺鐞嗚咃紝the Subscriber. GetOutSubscriber sharkBody = new GetOutSubscriber();
//寤虹珛椴ㄩ奔鐨勭緇忕郴緇熷崟鍏?/span>
杞歡寮鍙戠綉 www.mscto.com
GetOutEventHandler eventAction1 = new GetOutEventHandler(sharkBody.OpenTheDoor); GetOutEventHandler eventAction2 = new GetOutEventHandler(sharkBody.PutDownWhat); GetOutEventHandler eventAction3 = new GetOutEventHandler(sharkBody.CloseTheDoor);
//鎶婇波楸肩殑紲炵粡緋葷粺鍗曞厓涓庤剳瀛愯仈緋昏搗鏉? 鍗充負(fù)灝嗕簨浠跺鐞嗗姩浣滄敞鍐屽埌浜嬩歡濮旀墭涓? sharkMind.OnGetOutHandler += eventAction1; sharkMind.OnGetOutHandler += eventAction2; sharkMind.OnGetOutHandler += eventAction3;
//澶栭潰澶╂皵涓嶉敊錛屾垜鍐沖畾鍑哄幓璧拌蛋錛屼簬鏄駭鐢熶竴緋誨垪鐨勪簨浠跺鐞嗭紒 sharkMind.DecideGetOut(); } }
|
2.2 鍓栨瀽鏁翠釜緇勬垚...鍏堜粠delegate寮濮嬶紝涓轟簡(jiǎn)鑳藉灝佽浜嬩歡錛屾垜浠渶瑕佸厛瀹氫箟涓涓猟elegate錛?br>
delegate void GetOutEventHandler(Object source, GetOutEventArgs e);
2.3 鍋囧畾浣犵殑浜嬩歡澶勭悊鐨勬椂鍊欙紝榪橀渶瑕佷紶閫掍竴浜涘弬鏁幫紝鎵浠ユ垜浠繕闇瀹氫箟涓涓狤ventArgs錛?br> 灝辯畻鍑洪棬鐨勬椂鍊欏甫浠涔堜笢瑗垮惂~~~ ^ ^!
filename錛欸etOutEventArgs.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 瀵瑰簲鍑哄幓錛屾垜浠氨灞闄愪笅闈㈢殑鍝嶅簲鍔ㄤ綔浜?jiǎn)锛?xì)
filename錛欸etOutSubscribe.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錛欸etOutPublisher.cs |
class GetOutPublisher { //Publisher 璇達(dá)細(xì)鍠傦紝鎴戞湁涓涓簨浠訛紝璋佹潵澶勭悊錛?/span> public event GetOutEventHandler OnGetOutHandler;
//Publisher 浜х敓鍏蜂綋鐨勪簨浠?/span> protected void OnGetOut(GetOutEventArgs e) { //鏈夎皝鏉ヨ礋璐e鐞嗕簨浠跺悧? if (null != this.OnGetOutHandler) { //璁╀粬浠潵澶勭悊鍚?.. OnGetOutHandler(this, e); } }
//瀵瑰鍏紑鐨勬帴鍙o紝璋冪敤姝ゆ柟娉曚細(xì)浜х敓浜嬩歡. public void DecideGetOut() { OnGetOut(new GetOutEventArgs()); }
}
|
2.6 褰撴湁浜?jiǎn)涓婇潰鐨凱ublisher涓嶴ubscriber鍚庯紝瑕佹妸瀹冧滑涓茶搗鏉ワ紝闇瑕侀伒寰笅闈㈢殑榪囩▼錛?br>
Step 1錛氬緩绔婸ublisher Instance錛屽嵆Event Source
Step 2錛氬緩绔婼ubscriber Instance錛屽嵆Event Handler
Step 3錛氬緩绔嬩竴涓狣elegate錛屾潵鎵挎帴Subscriber鐨勫叿浣撳姩浣?br> Step 4錛氭妸寤虹珛鐨凞elegate涓嶦vent榪涜緇戝畾錛屾垜浠О涔嬩負(fù)register
Step 5錛氬閮ㄨ皟鐢紝浜х敓Event錛屾墍鏈夌殑Event Handler鏀跺埌閫氱煡錛屽紑濮嬫墽琛?br>
鍏蜂綋鍙互鍙傝?.1涓殑涓誨嚱鏁扮殑姝ラ!
2.7 榪愯鐨勭粨鏋滃涓?
Open the door... Put down Nothing... Close the door...
|