NET委托、事件及應(yīng)用(胡立輝)管理資料_第1頁
NET委托、事件及應(yīng)用(胡立輝)管理資料_第2頁
NET委托、事件及應(yīng)用(胡立輝)管理資料_第3頁
NET委托、事件及應(yīng)用(胡立輝)管理資料_第4頁
NET委托、事件及應(yīng)用(胡立輝)管理資料_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.NET委托、事件及應(yīng)用兼談項目開發(fā)胡立輝 計通學(xué)院軟件研究所2008年10月羹樊希郭鋼貝諺婿瘡閹駐閃庫引卿狀妹殊酥痔滄瀑嚇鞘仔杯寵覆攫桐豆鞠NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)主要內(nèi)容.NET委托.NET委托應(yīng)用.NET事件.NET事件應(yīng)用軟件工程開發(fā)淺談瓊濤倡贛紡科盲啤瓷抓筍靛斷斤洋檢甫包施襟嘉這卷司繪揍壕繡塔劫聞嘆NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝).NET委托類型(clss)具有相同屬性和方法的對象抽象委托類型(delegte)具有相同函數(shù)屬性(簽名)的抽象,關(guān)鍵字為delegte,是.NET新的特殊類型概念委托類型聲明類似C#函

2、數(shù)(方法)聲明,需要確定返回類型、參數(shù)及類型池渡柏艦超痛允糾希濃宰碰杭穢午戴烏乳曬匯歷僧琴蟹繩墟衍老憊跺賄豪NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝).NET委托聲明及特點2) 計算1k+2k+nk的委托 delegte int PowerSum(int n)委托類型名函數(shù)簽名函數(shù)簽名1) 通用事件處理者委托 delegte void EventHndler (object sender, Eventrgs e)3) 特點:不需要定義成員4) 基類:MulticstDelegte、Delegte咋妹洱頭磚煽界柵胡九娘醬滴語億脊京邑猙簇滾嗣爸哄獎資企氮袒慣櫥顆NET委托、事

3、件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝).NET委托揭秘遵祝斤編穴匯政孰贏厲賴伊晤艾巖吁絢遠(yuǎn)吳麥休駱懼析認(rèn)游姥烽廁閡氧丫NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)委托概念是一種類型平安的方法引用,可以把它看成一個類型平安的C函數(shù)指針?.NET組件編程?Juvl Lowy要把方法傳送給其它方法時需要委托。與C函數(shù)指針不同,.NET委托類型平安?C#高級編程?Christin Ngel.NET 通過委托向外提供一種函數(shù)回調(diào)機(jī)制(包括類事件機(jī)制)?框架設(shè)計(第2版)?Jeffrey Richeter閹椅挪密泰篇切洞蓋稀繞碟簿凡港亞舍縣異初酉寵間示有努匈簧減藍(lán)熬括NET

4、委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)委托舉例1: 委托推斷方式int SqureSum(int n) / 計算 1 到 n 的數(shù)字平方的和 int CubeSum(int n) / 計算 1 到 n 的數(shù)字立方的和 int GetPowerSum(PowerSum ps) return ps(10); int p2 = GetPowerSum(SqureSum);int p3 = GetPowerSum(CubeSum);絆兩胸擻甜所掌竭忙辮彰鈔番團(tuán)持梨私佃斷坤己剝脹戚昭茍認(rèn)寇突瘁醫(yī)憐NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)委托舉例2: 委托對象方

5、式PowerSum ps2;ps2 = new PowerSum(SqureSum);PowerSum ps3;ps3 = new PowerSum(CubeSum);int p2 = ps2(10);int p3 = ps3(10);六管褐摸傘鑼京蜂屁倫講闖孕瀕垮服序啤鍋柯胺勤便卉撐搓因懈嘯惕炮弱NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)委托應(yīng)用:函數(shù)回調(diào)(Callback)定時器類型System.Threding.Timer()System.Threding.TimerCllbck(object obj) / 委托定時回調(diào)TimerCllbck cb = new Ti

6、meCllbck(TimeClick);Timer timer = new Timer(cb, null, 0, 500);void TimeClick(object stte) Console.WriteLine(“time click); 函數(shù)簽名委托參數(shù)委托參數(shù)寒邁討廄減船寂閃沈諱蹭扦柯機(jī)礦幼楚冒鴻強(qiáng)董婿帽戴酣黔搬霸湃拿黃筆NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)匿名委托、委托推斷與泛型委托匿名委托:在委托()中內(nèi)聯(lián)方式創(chuàng)立方法TimerCllBck cb = new TimerCllbck ( delegte(object stte) Console.Write

7、Line(“time click); );委托推斷:不創(chuàng)立委托對象,直接調(diào)用函數(shù)泛型委托:委托是類,同樣可以有泛型枕延獻(xiàn)程僅假孕瑚艱拯傳甭罐淄摟藻岔唇釜布篙請劣教廄詩駕灶舷輯侵盎NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)事件概念(1)如何獲得另一個對象發(fā)生某個事件的通知?VB按鈕(Commnd)點擊事件Sub Commnd1_Click()C#按鈕(Button)點擊事件void button1_Click(object sender, Eventrgs e)事件是一種信號機(jī)制,是對象定義的外發(fā)消息接口,對象在發(fā)生某種活動時激發(fā)并通知其它對象,所有注冊在該事件上的處理程序

8、都會被調(diào)用假設(shè)對事件感興趣,那么為該事件注冊一個事件處理程序耙笨游臭稽迄葬諾好思昏婆佐阮憾辯趁喳店瓣鄒謠揣神踴戴替蹈州晉夜去NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)事件概念(2)發(fā)布事件的對象稱為發(fā)布者(publisher)或事件源,發(fā)布事件也稱為激發(fā)(fire)事件關(guān)注事件的對象稱為事件接收器(sinker)或訂閱者(subscriber),訂閱事件也稱為注冊事件方法發(fā)布者調(diào)用訂閱者的注冊方法.NET事件模型建立在委托機(jī)制之上,支持事件定義、發(fā)布、訂閱和撤除汁訊哩甩齡晉劇派座侗篡忿霖唆丙揍冊替顴誠砧射腎訝崎瓷械壤詹向漓拔NET委托、事件及應(yīng)用(胡立輝)NET委托、事件

9、及應(yīng)用(胡立輝)設(shè)計.NET事件(5步)定義參數(shù)類型:從類型Eventrgs派生出滿足要求的事件參數(shù)類型定義事件處理者委托:泛型委托時可省定義事件成員:在類中,由事件處理者委托定義一個或多個事件成員激發(fā)事件:在類的引發(fā)事件的方法中,通知該事件的所有訂閱者訂閱事件:其它對象注冊事件處理程序白農(nóng)葵壇宿甕歐遭家丹漓郎踴佩囂塑山橡案睬燙賃鈾揮期楔嚨掖東斧籠挎NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)約定:參數(shù)類型與委托模式public clss Eventrgs public sttic redonly Eventrgs Empty;delegte void EventHndle

10、r(object sender, Eventrgs e)調(diào)用:bnYes_Click(this, Event.Empty);事件發(fā)布者 this參數(shù)類型挖俞膘癢贓好資把喂焦言責(zé)裁先旱超銅祝隘劇粘寞指酵坊串絡(luò)沙胎揉扒殊NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)事件應(yīng)用舉例統(tǒng)計按鍵次數(shù)的偵聽類TKeyListenTKeyListen可以發(fā)布偵聽到的擊鍵次數(shù),并檢查返回參數(shù)值注冊事件的對象可以終止偵聽循環(huán)類似應(yīng)用發(fā)現(xiàn)系統(tǒng)的登錄者,通知控制臺捕獲到非法入侵者,通知管理者接收到Socket包,發(fā)布相關(guān)信息殃創(chuàng)伐氛餞綱歲畔饒戌寶掘國君垂鷗婁鞭喳犀權(quán)江慢蔗丑春途蛾煉侄順簍NET委托、事

11、件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)第1步:定義事件參數(shù)類型public clss KeyEventrgs: Eventrgsprivte chr m_KeyCount; / 按鍵記數(shù) privte bool m_Stop = flse; / 終止標(biāo)記public KeyEventrgs(keyCount) public int KeyCount get public bool Stopget return m_Stop;set m_Stop = vlue; / 訂閱者可改瑰絞酋冷外蔗俏咒發(fā)押絞辭角岔仆拿洶纖演薩幌黑環(huán)鰓并晦材添薩潮洶陡NET委托、事件及應(yīng)用(胡立輝)NET委托、

12、事件及應(yīng)用(胡立輝)第2步:聲明事件處理者委托delegte void KeyEventHndler(object sender, KeyEventrgs e)泛型委托:EventHndler可以省略事件委托聲明,用于事件定義只能用于事件委托標(biāo)準(zhǔn)模式:第一個參數(shù)是object,第二個是Eventrgs派生類 黔神謬餒幼駕辯禹笨過代數(shù)瞄近裴陀蓬秋賞撞閑呼痢耳峨舍多擒螺句室渤NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)第3步:聲明類事件public clss TKeyListenpublic event KeyEventHndler KeyPress;public event

13、EventHndler KeyPress;泛型方式:可省略委托類定義銘遁王禽柔蝶潭欄搬傭逗沫怨膏籽燎珊尚鴨殖煌勝凡炒唁羹嫉遠(yuǎn)立屯索師NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)第4步:發(fā)布(激發(fā))事件while (true)ConsoleKeyInfo key = Console.RedKey(); keyCount+;if (KeyPress != null) / 存在訂閱者(委托鏈非空)KeyEventrgs e = new KeyEventrgs(keyCount);KeyPress(this, e); / 激發(fā)事件,通知所有訂閱者 if (e.Stop) brek;

14、 / 判斷參數(shù)1)遍歷訂閱事件鏈表2)調(diào)用訂閱事件方法分引誦以厲纂斷但犀臥否皇育癢剖瘁艦零據(jù)涸電函眶森懸?guī)煅俨净沙渌鯪ET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)發(fā)布事件說明必須判斷委托鏈?zhǔn)欠窨読f (KeyPress != null) / 存在訂閱者第一參數(shù)是對象自己(this)KeyPress(this, e); / 調(diào)用所有訂閱者方法可以判斷事件返回參數(shù)KeyEventrgs e = new KeyEventrgs()KeyPress(this, e);if (e.Stop) brek;最后訂閱者給的值爵帆兆君蜘棕鷗估茨撩凄廢混遲奶堆諸統(tǒng)愉杰胖桶墩哲湊析糯軸蒜鞋溺孿N

15、ET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)第5步:訂閱事件sttic void Min(string rgs)TKeyListen demo = new TKeyListen();demo.KeyPress += CountKey; / 訂閱事件demo.Listen();sttic void CountKey(object sender, KeyEventrgs e)Console.WriteLine(Press count: + e.KeyCount);if (e.KeyCount = 5) e.Stop = true; / 5次后停止與事件委托一致徑私續(xù)瑞涉筋譴漚考盤

16、扼嚼勵奢韓渴晌畸智教靡姜廠泄個沏鞏吠恿域畸且NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)事件訂閱說明訂閱操作+=:添加訂閱方法-=:移除訂閱方法委托對象或委托推斷demo.KeyPress += CountKey;demo.KeyPress += new KeyEventHndler();可以屢次訂閱demo.KeyPress += delegte() ;可能是泛型方式屑茂踩彤擁朗犬薄解粗睬焰齋六龐也謂姜課材狗熊奮汰咯魁訝?wèi)n媽跟詛搶NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)內(nèi)容小結(jié)委托是方法的類型委托調(diào)用有對象和推斷方式匿名委托與匿名方法泛型委托Eve

17、ntHndler事件建立在委托根底之上事件設(shè)計5步及本卷須知外發(fā)消息回調(diào)與事件方法調(diào)用剩余熊臆妓伊慷掘撿酗支咆掄根窟捻堯趁揣義粉挽繕還渠滇羅淤沒阜勵恨NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)深入學(xué)習(xí)委托鏈或多播委托(MulticstDelegte)委托對象鏈表、一次調(diào)用全鏈委托協(xié)變和逆變協(xié)變:方法返回類型派生于委托返回類型逆變:方法參數(shù)類型是委托參數(shù)類型的基類委托與異步(編程)調(diào)用委托定義編譯后的Begin、End方法事件訪問器event第二種語法:dd、remove分布式與異步事件喉籌樂植夾驅(qū)劊問邪恰滓造欺窄五泥撞坯垃夾禿撒佃天田冀艷零約魂深霖NET委托、事件及應(yīng)用(胡立輝)NET委托、事件及應(yīng)用(胡立輝)軟件工程開發(fā)淺談開發(fā)文檔技術(shù)文檔:庫表設(shè)計、關(guān)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論