




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章接口、委托和事件【本章導(dǎo)讀】 本章內(nèi)容接口、委托和事件是面向?qū)ο蟪绦蛟O(shè)計(jì)中較深和較難的部分,各位在學(xué)習(xí)的過程中要結(jié)合前后部分的知識(shí)細(xì)細(xì)體會(huì)。9.1接口在軟件開發(fā)過程中,有時(shí)我們編寫的程序需要提供給外部商家進(jìn)行二次開發(fā)或者其它的服務(wù),但我們又不希望他們看見我們程序的內(nèi)部細(xì)節(jié),在此情況下,我們可以把我們的產(chǎn)品做成組件,用接口描述組件對(duì)外提供的服務(wù)。組件和組件之間、組件和客戶之間都通過接口進(jìn)行交互,所以接口在軟件設(shè)計(jì)過程中還是一個(gè)很重要的知識(shí)。9.1.1接口的含義接口(interface) 用來定義一種程序的協(xié)定。實(shí)現(xiàn)接口的類與接口的定義嚴(yán)格一致。接口可以包含方法、屬性、事件和索引器。接口本身不提供它所定義的成員的實(shí)現(xiàn)。接口只指定實(shí)現(xiàn)該接口的類或接口必須提供的成員。所以接口不能被實(shí)例。9.1.2定義接口
定義接口使用的關(guān)鍵字為interface,其一般形式為:[修飾符]interface接口名稱[:基接口列表]{ 接口體成員列表}其中,允許使用的修飾符有:public、protected、internal、private。在一個(gè)接口定義中同一修飾符不允許出現(xiàn)多次,new修飾符只能出現(xiàn)在嵌套接口中,表示覆蓋了繼承而來的同名成員。public,protected,internal,andprivate修飾符定義了對(duì)接口的訪問權(quán)限。9.1.2定義接口【實(shí)作任務(wù)】例9.1定義一個(gè)客車類的接口,該接口向外提供一個(gè)此車重量、車牌號(hào)的接口和一個(gè)輸出車相關(guān)信息方法的接口
interfaceIPasstrain{intWeight{get;set;}stringPlate{get;set;}voidShowinfo();}9.1.3實(shí)現(xiàn)接口
【實(shí)作任務(wù)】實(shí)現(xiàn)接口IPasstrain
classPasstrain:IPasstrain//類名為Passtrain(客車){ //以下實(shí)現(xiàn)接口中的Weight屬性 publicintWeight { get{returnweight;}//提供對(duì)weight的讀權(quán)限 set{weight=value;}//提供對(duì)weight的寫權(quán)限 } //以下實(shí)現(xiàn)接口中的Plate屬性 publicstringPlate { get{returnplate;}//提供對(duì)plate的讀權(quán)限 set{plate=value;}//提供對(duì)plate的寫權(quán)限 } //以下實(shí)現(xiàn)接口中的Showinfo方法 publicvoidShowinfo() { System.Console.WriteLine("我是客車"); System.Console.WriteLine("我的重量是:"+Weight); }}9.1.3實(shí)現(xiàn)接口測(cè)試代碼classTest{staticvoidMain(){IPasstrainp=newPasstrain();p.Weight=1000;p.Showinfo();}}運(yùn)行結(jié)果9.2委托委托是C#中的一種引用類型,主要用于.NETFramework中的事件處理程序和回調(diào)函數(shù)。一個(gè)委托可以看作一個(gè)特殊的類,因而它的定義可以像常規(guī)類一樣放在同樣的位置。與其他類一樣,委托必須先定義以后,再實(shí)例化。9.2委托委托派生于基類System.Delegate,不過委托的定義和常規(guī)類的定義方法不太一樣。委托的定義通過關(guān)鍵字delegate來定義:publicdelegateintmyDelegate(intx,inty);代碼定義了一個(gè)新委托,它可以封裝任何返回為int,帶有兩個(gè)int類型參數(shù)的方法。9.2委托步驟2:實(shí)例委托實(shí)例publicintsub(intx,inty){Console.WriteLine(x+y);}myDelegatecal=newmyDelegate(sub);cal(10,3);步驟1:定義方法步驟3:可以直接使用cal調(diào)用sub方法可通過以下步驟使用定義的委托9.2委托委托可以使用+運(yùn)算符號(hào)將多個(gè)委托組合在一起,或使用–運(yùn)算符號(hào)從組合委托中減去一個(gè)委托。參考:publicintfub(intx,inty){Console.WriteLine(x-y);}myDelegatemyd=newmyDelegate(fub);//再定義一個(gè)委托實(shí)例myd(10,3);//利用委托實(shí)例調(diào)用fub方法myDelegatezong=cal+myd;//定義委托zong(10,3);//此時(shí)再調(diào)用此時(shí)輸出: 13 79.3事件事件是什么?為什么要學(xué)習(xí)事件?
我們?cè)诘诙膶W(xué)習(xí)時(shí)已經(jīng)接觸過很多事件了,比如窗體加載、按鈕點(diǎn)擊、鼠標(biāo)雙擊等等,這些事件都是.NET封裝和集成好,且通過事件面板可以很方便的添加到程序中的,但是否知道其中運(yùn)行機(jī)制,我想很多同學(xué)都還不是很清楚,這都需要進(jìn)一步的學(xué)習(xí),而且象我們目前解決的客車超速時(shí)要警示駕駛員這樣的事件在.NET中也是沒有現(xiàn)成的,很多情況下都還需要我們自己定義事件。
9.3事件事件的定義用關(guān)鍵字event聲明,不過聲明事件之前必須存在一個(gè)委托(這個(gè)委托一般根據(jù)編制的事件編寫):publicdelegatevoidEventHandler(objectsender,EventArgse);然后定義事件:publiceventEventHandlerOnEventHandler;9.3事件若存在事件處理程序:publicvoidbuttonCreate_Click(objectsender,EventArgse){Console.Write("事件代碼被觸發(fā)");}可用下面代碼將事件處理程序和事件聯(lián)系起來:OnEventHandler+=newEventHandler(buttonCreate_Click);9.3事件【多學(xué)一點(diǎn)】事件參數(shù)事件處理程序一般接收兩個(gè)參數(shù),一個(gè)為object,表明發(fā)送事件的源,一個(gè)為EventArgs,表明事件發(fā)生時(shí)向事件處理程序傳遞的參數(shù),這兩個(gè)類型都是.NET自帶的,但是這不是必須的,只是程序員一般在編寫事件的時(shí)候都設(shè)置這兩個(gè)參數(shù)。9.3事件【實(shí)作任務(wù)】設(shè)計(jì)程序,當(dāng)客車速度超過設(shè)定時(shí)速時(shí)觸發(fā)相應(yīng)事件從而警示駕駛員客車超速。classPasstrain//類名為Passtrain(客車){publicstaticfloatSMAX=100;//靜態(tài)公有字段,最大時(shí)速privatefloatnowv;//客車的當(dāng)前時(shí)速字段//定義事件的委托publicdelegatevoidChangedEventHandler(objectsender,EventArgse);//定義一個(gè)事件publiceventChangedEventHandlerChanged;//用以觸發(fā)Change事件protectedvirtualvoidOnChanged(EventArgse){if(this.Changed!=null)this.Changed(this,e);}9.3事件 //客車的當(dāng)前時(shí)速屬性 publicfloatNowv{ get{returnnowv;} set{nowv=value; //時(shí)速改變時(shí)觸發(fā)Change事件 this.OnChanged(newEventArgs()); }}}classProgram{staticvoidMain(string[]args){Passtrainpss=newPasstrain();//將事件處理程序添加到事件的調(diào)用列表中(即事件布線)pss.Changed+=newPasstrain.ChangedEventHandler(NowV_Changed);//設(shè)置屬性值,觸發(fā)相應(yīng)的事件pss.Nowv=80;pss.Nowv=120;Console.Read();}//對(duì)Change事件處理的程序privatestaticvoidNowV_Changed(objectsender,EventArgse){ if(((Passtrain)sender).Nowv<Passtrain.SMAX) Console.WriteLine("客車時(shí)速在正常范圍內(nèi)!"); else Console.WriteLine("客車時(shí)速太大,危險(xiǎn)!");}}9.3事件解析
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 民辦萬博科技職業(yè)學(xué)院《水工建筑物》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025海南省安全員B證考試題庫附答案
- 武漢設(shè)計(jì)工程學(xué)院《火電廠煙氣凈化Ⅰ》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北科技學(xué)院《生物技術(shù)制藥B》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川科技職業(yè)學(xué)院《房屋建筑與實(shí)務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 荊門職業(yè)學(xué)院《雷達(dá)信號(hào)分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江三江美術(shù)職業(yè)學(xué)院《BIM技術(shù)與軟件應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 長春早期教育職業(yè)學(xué)院《紡織品實(shí)驗(yàn)與設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年河北省部分重點(diǎn)中學(xué)高三上學(xué)期12月聯(lián)考?xì)v史試卷
- 廣西民族師范學(xué)院《連鎖經(jīng)營管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶市渝北區(qū)龍山小學(xué)-25版四年級(jí)寒假特色作業(yè)【課件】
- 煤礦重大災(zāi)害治理中長期規(guī)劃(防治煤塵爆炸、火災(zāi)事故)
- 2024年事業(yè)單位考試(綜合管理類A類)綜合應(yīng)用能力試題及解答參考
- 管理ABC-干嘉偉(美團(tuán)網(wǎng)COO)
- 高壓氧科工作總結(jié)高壓氧科個(gè)人年終總結(jié).doc
- 《政治學(xué)概論》教學(xué)大綱
- 橋梁缺陷與預(yù)防
- 食品生物化學(xué)習(xí)題謝達(dá)平(動(dòng)態(tài))
- 保安員工入職登記表
- 睿達(dá)RDCAM激光雕刻切割軟件V5.0操作說明書
- 機(jī)械設(shè)計(jì)基礎(chǔ)平面連桿機(jī)構(gòu)課件
評(píng)論
0/150
提交評(píng)論