第9章委托與事件_第1頁
第9章委托與事件_第2頁
第9章委托與事件_第3頁
第9章委托與事件_第4頁
第9章委托與事件_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第9章接口、委托和事件【本章導讀】 本章內容接口、委托和事件是面向對象程序設計中較深和較難的部分,各位在學習的過程中要結合前后部分的知識細細體會。9.1接口在軟件開發(fā)過程中,有時我們編寫的程序需要提供給外部商家進行二次開發(fā)或者其它的服務,但我們又不希望他們看見我們程序的內部細節(jié),在此情況下,我們可以把我們的產品做成組件,用接口描述組件對外提供的服務。組件和組件之間、組件和客戶之間都通過接口進行交互,所以接口在軟件設計過程中還是一個很重要的知識。9.1.1接口的含義接口(interface) 用來定義一種程序的協(xié)定。實現(xiàn)接口的類與接口的定義嚴格一致。接口可以包含方法、屬性、事件和索引器。接口本身不提供它所定義的成員的實現(xiàn)。接口只指定實現(xiàn)該接口的類或接口必須提供的成員。所以接口不能被實例。9.1.2定義接口

定義接口使用的關鍵字為interface,其一般形式為:[修飾符]interface接口名稱[:基接口列表]{ 接口體成員列表}其中,允許使用的修飾符有:public、protected、internal、private。在一個接口定義中同一修飾符不允許出現(xiàn)多次,new修飾符只能出現(xiàn)在嵌套接口中,表示覆蓋了繼承而來的同名成員。public,protected,internal,andprivate修飾符定義了對接口的訪問權限。9.1.2定義接口【實作任務】例9.1定義一個客車類的接口,該接口向外提供一個此車重量、車牌號的接口和一個輸出車相關信息方法的接口

interfaceIPasstrain{intWeight{get;set;}stringPlate{get;set;}voidShowinfo();}9.1.3實現(xiàn)接口

【實作任務】實現(xiàn)接口IPasstrain

classPasstrain:IPasstrain//類名為Passtrain(客車){ //以下實現(xiàn)接口中的Weight屬性 publicintWeight { get{returnweight;}//提供對weight的讀權限 set{weight=value;}//提供對weight的寫權限 } //以下實現(xiàn)接口中的Plate屬性 publicstringPlate { get{returnplate;}//提供對plate的讀權限 set{plate=value;}//提供對plate的寫權限 } //以下實現(xiàn)接口中的Showinfo方法 publicvoidShowinfo() { System.Console.WriteLine("我是客車"); System.Console.WriteLine("我的重量是:"+Weight); }}9.1.3實現(xiàn)接口測試代碼classTest{staticvoidMain(){IPasstrainp=newPasstrain();p.Weight=1000;p.Showinfo();}}運行結果9.2委托委托是C#中的一種引用類型,主要用于.NETFramework中的事件處理程序和回調函數(shù)。一個委托可以看作一個特殊的類,因而它的定義可以像常規(guī)類一樣放在同樣的位置。與其他類一樣,委托必須先定義以后,再實例化。9.2委托委托派生于基類System.Delegate,不過委托的定義和常規(guī)類的定義方法不太一樣。委托的定義通過關鍵字delegate來定義:publicdelegateintmyDelegate(intx,inty);代碼定義了一個新委托,它可以封裝任何返回為int,帶有兩個int類型參數(shù)的方法。9.2委托步驟2:實例委托實例publicintsub(intx,inty){Console.WriteLine(x+y);}myDelegatecal=newmyDelegate(sub);cal(10,3);步驟1:定義方法步驟3:可以直接使用cal調用sub方法可通過以下步驟使用定義的委托9.2委托委托可以使用+運算符號將多個委托組合在一起,或使用–運算符號從組合委托中減去一個委托。參考:publicintfub(intx,inty){Console.WriteLine(x-y);}myDelegatemyd=newmyDelegate(fub);//再定義一個委托實例myd(10,3);//利用委托實例調用fub方法myDelegatezong=cal+myd;//定義委托zong(10,3);//此時再調用此時輸出: 13 79.3事件事件是什么?為什么要學習事件?

我們在第二篇的學習時已經接觸過很多事件了,比如窗體加載、按鈕點擊、鼠標雙擊等等,這些事件都是.NET封裝和集成好,且通過事件面板可以很方便的添加到程序中的,但是否知道其中運行機制,我想很多同學都還不是很清楚,這都需要進一步的學習,而且象我們目前解決的客車超速時要警示駕駛員這樣的事件在.NET中也是沒有現(xiàn)成的,很多情況下都還需要我們自己定義事件。

9.3事件事件的定義用關鍵字event聲明,不過聲明事件之前必須存在一個委托(這個委托一般根據(jù)編制的事件編寫):publicdelegatevoidEventHandler(objectsender,EventArgse);然后定義事件:publiceventEventHandlerOnEventHandler;9.3事件若存在事件處理程序:publicvoidbuttonCreate_Click(objectsender,EventArgse){Console.Write("事件代碼被觸發(fā)");}可用下面代碼將事件處理程序和事件聯(lián)系起來:OnEventHandler+=newEventHandler(buttonCreate_Click);9.3事件【多學一點】事件參數(shù)事件處理程序一般接收兩個參數(shù),一個為object,表明發(fā)送事件的源,一個為EventArgs,表明事件發(fā)生時向事件處理程序傳遞的參數(shù),這兩個類型都是.NET自帶的,但是這不是必須的,只是程序員一般在編寫事件的時候都設置這兩個參數(shù)。9.3事件【實作任務】設計程序,當客車速度超過設定時速時觸發(fā)相應事件從而警示駕駛員客車超速。classPasstrain//類名為Passtrain(客車){publicstaticfloatSMAX=100;//靜態(tài)公有字段,最大時速privatefloatnowv;//客車的當前時速字段//定義事件的委托publicdelegatevoidChangedEventHandler(objectsender,EventArgse);//定義一個事件publiceventChangedEventHandlerChanged;//用以觸發(fā)Change事件protectedvirtualvoidOnChanged(EventArgse){if(this.Changed!=null)this.Changed(this,e);}9.3事件 //客車的當前時速屬性 publicfloatNowv{ get{returnnowv;} set{nowv=value; //時速改變時觸發(fā)Change事件 this.OnChanged(newEventArgs()); }}}classProgram{staticvoidMain(string[]args){Passtrainpss=newPasstrain();//將事件處理程序添加到事件的調用列表中(即事件布線)pss.Changed+=newPasstrain.ChangedEventHandler(NowV_Changed);//設置屬性值,觸發(fā)相應的事件pss.Nowv=80;pss.Nowv=120;Console.Read();}//對Change事件處理的程序privatestaticvoidNowV_Changed(objectsender,EventArgse){ if(((Passtrain)sender).Nowv<Passtrain.SMAX) Console.WriteLine("客車時速在正常范圍內!"); else Console.WriteLine("客車時速太大,危險!");}}9.3事件解析

溫馨提示

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

評論

0/150

提交評論