




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
教育部普通高等教育十二五國家級規劃教材
《C#程序設計教程》第3版
第4章接口委托與事件2Ch4接口委托與事件4.1接口4.2委托4.3事件34.1接口接口的用途表示調用者和設計者的一種約定;接口的作用和抽象類的作用相似,接口是完全抽象的成員集合。抽象類主要用于關系密切的對象,而接口最適合為不相關的類提供通用的功能。接口和抽象類選擇因素抽象類:創建不同版本的組件或實現通用的功能,設計大的功能單元接口:創建的功能在大范圍的完全不同的對象之間使用,設計小而簡練的功能塊4.1.1接口的聲明和實現接口只包含成員的聲明部分,而沒有實現部分。接口可以包含方法、屬性、事件和索引器。interface關鍵字聲明一個接口,接口名稱一般用大寫的“I”開頭。[訪問修飾符]interface接口名稱{
接口體}實現接口成員的類中對應的成員必須是公開的、非靜態的,并且與接口成員有相同的名稱和簽名。【例4-1】演示接口的聲明與實現。44.1.2顯式方式實現接口顯式實現接口由于不同接口中的成員可重名,一個類中實現接口中的成員時可能會存在多義性的問題。使用注意實現接口方法的形式“接口名.方法名”。“顯式接口成員的實現”只能通過接口實例來訪問。【例4-2】演示如何以顯式方式實現接口。54.1.3利用接口實現多繼承C#繼承的方式:類繼承:實現單一繼承接口繼承:實現多重繼承。接口可以繼承其他接口,語法為[訪問修飾符]interface接口名稱
:被繼承的接口列表{
接口體}【例4-3】演示如何利用接口實現多繼承。64.2委
托委托類型(delegatetype)類似C++語言中指向函數的指針委托既可以指向靜態方法,還可指向實例的方法。委托是完全面向對象的技術,無內存泄露情況。委托特點任何類或對象中的方法都可以通過委托來調用,將方法作為參數傳遞。要求方法的參數類型和返回類型要與委托的參數類型和返回類型完全匹配。74.2委
托委托使用的一般步驟1.定義委托類型2.定義委托要調用的方法,方法必須和委托具有相同的簽名。3.創建委托類型的實例,指向要執行的方法通過new初始化時指定通過“=”、“+=”運算符指定4.使用委托實例,執行調用方法注意委托只能執行與其參數、返回值都匹配的方法;84.2.1定義委托類型定義委托的一般語法[訪問修飾符]delegate返回類型
委托名([參數序列]);委托定義時,沒有方法體,具體執行的方法是在使用委托時動態指定的;委托編譯時,生成一個新類,繼承自Systems.Delegate類;例如:定義了一個名為MyFunction的委托publicdelegatedoubleMyFunction(doublex);
編譯器編譯這行代碼時,會自動為其生成一個繼承自System.Delegate的類型,類型的名稱為MyFunction。9委托舉例1、委托聲明publicdelegateintCalc(inti,intj);2、定義被調用的方法classB{publicintAdd(inti,intj)
{Console.WriteLine("{0}+{1}={2}",i,j,i+j);returni+j;
}publicintSub(inti,intj)
{Console.WriteLine("{0}-{1}={2}",i,j,i-j);returni-j;
}}3、委托對象的創建和使用(1)僅執行一個方法Bbb=newB();Calccal=newCalc(bb.Add);Console.WriteLine(cal(1,2));(2)執行多個方法Bbb=newB();Calccal=newCalc(bb.Add);cal+=bb.Sub;cal(1,2);4.2.2通過委托調用方法定義了委托類型后,就可以像使用其他類型一樣使用委托。通過委托,可將方法作為實體賦值給變量,也可以將方法作為委托的參數來傳遞。例:將f作為參數,f為自定義的委托類型MyFunction:publicstaticdouble[]Apply(double[]a,MyFunctionf){double[]result=newdouble[a.Length];for(inti=0;i<a.Length;i++)result[i]=f(a[i]);returnresult;}114.2.2通過委托調用方法對下面的靜態方法:publicstaticdoubleSquare(doublex){returnx*x;}
可將靜態的Square方法作為MyFunction類型的參數傳遞給Apply方法:double[]a={0.0,0.5,1.0};double[]squares=Apply(a,Square);【例4-4】演示委托的基本用法。124.3事
件事件(event)事件是一種使類或對象能夠提供通知的成員,事件是利用委托來實現的。一般利用事件響應用戶的鼠標或鍵盤操作,或者自動執行某個與事件關聯的行為。要在應用程序中使用事件,必須提供一個事件處理程序(事件處理方法),以便與事件關聯的委托能自動調用它。134.3.1事件的聲明和引發事件的聲明和引發的使用步驟:1、聲明事件前,先定義一個委托。例:publicdelegatevoidMyEventHandler()2、定義委托后,就可以用event關鍵字聲明事件,例如:publiceventMyEventHandlerHandler;3、定義引發該事件時要調用的方法,如:publicvoidOnHandler(){Handler();}4、定義事件觸發后要執行的方法。如:
publicvoidMyMethod(){…}144.3.1事件的聲明和引發5、實例化事件所在類的對象,然后通過“+
=
”和“?
=
”運算符向事件添加委托來注冊或取消對應的事件。例如:myEvent.Handler+=new
MyEventHandler(myEvent.MyMethod);myEvent.Handler?=new
MyEventHandler(myEvent.MyMethod);6、引發事件,執行事件處理程序,如:myEvent.OnHandler();154.3.1事件的聲明和引發【例4-5】演示事件的基本用法。164.3.2具有標準簽名的事件標準簽名的事件中,事件處理程序包含兩個參數:第1個參數是Object類型,表示引發事件的對象;第2個參數是從EventArgs類型派生的類型,用于保存事件數據標準簽名的事件的用法,.NET框架提供了以下委托:EventHandler委托,用于不包含事件數據的事件publicdele
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CECS 10051-2019綠色建材評價石材
- T/CECS 10033-2019綠色建材評價建筑遮陽產品
- T/CCS 073-2023井工煤礦智能掘進系統運維管理規范
- T/CCOA 17-2020糧油食品感官檢驗規范
- T/CCAS 023-2022用于水泥中的改性球狀磷石膏
- T/CAZG 015-2022動物園動物化學保定操作規程
- T/CAQI 63-2019電動防霾口罩
- T/CAQI 123-2020家用和類似用途飲用水處理裝置用活性炭組件安全使用壽命評價規范
- 華信智原java面試題及答案
- 管理崗面試題及答案
- 導截流驗收報告匯編
- 大班科學《神奇的中草藥》課件
- 信用修復申請書
- 全過程造價控制流程全圖
- 溫州7.23動車事故調查報告介紹課件
- RAL 勞爾色卡電子版
- 造價咨詢質量控制保證措施及服務質量
- 跳棋教學(課堂PPT)
- 火車過橋問題四年級(課堂PPT)
- MSA偏倚分析報告樣本
- 中國顱腦創傷顱內壓監測專家共識
評論
0/150
提交評論