![C_面向對象編程(四)接口和委托_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/db712187-b8de-4a85-8a46-d0a0d0e2d990/db712187-b8de-4a85-8a46-d0a0d0e2d9901.gif)
![C_面向對象編程(四)接口和委托_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/db712187-b8de-4a85-8a46-d0a0d0e2d990/db712187-b8de-4a85-8a46-d0a0d0e2d9902.gif)
![C_面向對象編程(四)接口和委托_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/db712187-b8de-4a85-8a46-d0a0d0e2d990/db712187-b8de-4a85-8a46-d0a0d0e2d9903.gif)
![C_面向對象編程(四)接口和委托_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/db712187-b8de-4a85-8a46-d0a0d0e2d990/db712187-b8de-4a85-8a46-d0a0d0e2d9904.gif)
![C_面向對象編程(四)接口和委托_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/db712187-b8de-4a85-8a46-d0a0d0e2d990/db712187-b8de-4a85-8a46-d0a0d0e2d9905.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、接口的概念:接口是一種引用類型,類似于抽象類,主要用來定義一些必須實現(xiàn)的功能。一旦定義了一個接口,而且定義了一個實現(xiàn)這個接口的類,使用這些類的用戶就可以完成接口定義的功能。多重繼承是指一個子類可以有一個以上的直接父類,C#并不支持多重繼承,而是用接口實現(xiàn)比多重繼承更強的功能。接口的作用:(1)可以實現(xiàn)不同類的相同行為,不需要考慮類之間的層次關系;(2)可以指明多個類需要實現(xiàn)的方法;(3)可以使處于不同層次甚至互不相關的類具有相同的行為。程序員可以把用于完成特定功能的若干功能成員組織成相對獨立的集合(接口),凡是需要實現(xiàn)這種特定功能的類都可以繼承這個集合(接口)并在類內使用它。例如:String
2、類和Double類分別表示字符串和實數(shù),它們有一個共同特點即可以與其他對象比較大小,這時就將相關方法CompareTo集合到一個Icompare接口中,而在String類和Double類中都實現(xiàn)了這個接口即實現(xiàn)了比較的功能。假設有類Airplane,Bird,Superman,這些類之間并沒有繼承關系也不一定處于相同的層次上,但他們可以擁有共同的方法takeoff( )、fly( )、land( )。那就可以定義一個接口Ifly,接口中有三個方法成員,上述三個類都可以繼承自該接口,即他們都有相同的三個方法。Ifly:takeoff( );fly( );land( );Airplane:take
3、off( );fly( );land( );.Bird:takeoff( );fly( );land( );Superman:takeoff( );fly( );land( );Vehicle:Animal:要聲明一個接口必須用到interface關鍵字,聲明一個接口的一般形式如下: 屬性 修飾符 interface 接口的名稱 :基接口列表 /語句 例子:interface IShowInfo int x get; set; void ShowInfo( ); 在接口中包含的屬性和方法僅僅是一個聲明,在接口中不能包含它們的實現(xiàn),在C#中的接口成員隱含是public,不能再加除new之外的其他
4、修飾符。接口本身可以帶修飾符。聲明了一個接口只是定義了一些功能,或者說定義了要完成一些功能的契約,要使用這個功能,還必須用類來實現(xiàn)這個接口,而且可以用一個類來實現(xiàn)多個接口。using System;interface INumber int x get; set; class Number:INumber private int myx; public Number(int x) myx=x; public int x /對接口中屬性對接口中屬性X的實現(xiàn)的實現(xiàn) get return myx; set myx=value; class AppMain( ) private static void
5、 WriteX(INumber p) Console.WriteLine(“x=0”, p.x); public static void Main( ) Number p=new Number(1); WriteX(p); string str=Console.ReadLine( ); 接口可以從一個或多個父接口中繼承,格式如下:interface Myinterface: Ibase1,Ibase2 .接口由類來實現(xiàn)時,格式如下:class 類名: 父類,接口1,接口2,.,接口n .父類必須放在最前面,一個類如果實現(xiàn)了某個接口則要求在該類中能找到與該接口各個成員相對應的成員,即接口中的成員
6、在類中都必須實現(xiàn)(可以從父類繼承過來)。類只能有一個父類但可以實現(xiàn)多個接口,實際上實現(xiàn)了多重繼承。interface Ilist int Count get;set;)interface Icount void Count( int i); interface IListCount:IList,Icount class c void Test(IListCount x) x.Count(2); x.Count=1;程序出錯,Count不明確;此時可以通過強制類型轉換來明確地指定。 (Ilist)x).Count=1;(ICount)x).Count(2);using System;interf
7、ace ITest void test1(); void test2( );在接口的實現(xiàn)中,還有一種實現(xiàn)方式叫做顯式接口成員實現(xiàn)。意思就是在實現(xiàn)一個接口成員的時候,要使用完全限定名,即要求 同時使用接口的名稱和接口成員的名稱。使用顯式接口成員實現(xiàn)的成員不能通過類的完全限定名訪問而只能用接口的實例來訪問。class Test:ITest void ITest.test1( ) /顯式方式實現(xiàn)方法 Console.WriteLine(“” ); public void test2( ) /普通方式實現(xiàn)方法 Console.WriteLine(“”);class AppMain( ) public
8、static void Main( ) Test t=new Test( ); /生成一個Test類的實例 ITest it=t; /生成一個接口的實例 it.test1( ); /用接口的實例來調用方法test1 t.test2( ); /用實現(xiàn)類的實例方法來調用test2 string str=Console.ReadLine( ); 接口映射就是查找接口的成員到底是在類的什么地方實現(xiàn)的,一般而言查找的過程如下:(1)要在C中查找I.X實現(xiàn),如果C中已經(jīng)包含了和I.X 相匹配的顯式接口成員實現(xiàn),就可以找到。(2)如果沒有匹配的顯式接口成員實現(xiàn),那么查找C中所有的非靜態(tài)公共成員,如果找到和I
9、.X匹配的,也可以找到。(3)如果在前兩步?jīng)]有找到,就在C的基類中繼續(xù)重復以上的查找,直到找到為止,如果沒有找到就會出錯。例一、interface ITest object test( );class c:ITest objest ITest.test( ) . public objest test( ) .顯式接口成員實現(xiàn)具有最高優(yōu)先級,所以c的ITest.test將成為接口中test方法的實現(xiàn)。例二、interface IControl void Print( );interface IForm void Print( );class Page:IControl,IForm public
10、void Print( ) . 兩個接口的Print方法都被映射到類Page的Print了。如果在一個類中實現(xiàn)了接口,那么這個類的派生類就可以繼承這個接口的實現(xiàn)??梢栽谂缮愔须[藏基類中的實現(xiàn),但并不能改變基類中的實現(xiàn)向接口的映射關系。指代又可稱為代理或委托,作用相當于C中的函數(shù)指針,即一個指代對應于一個方法。基本形式:屬性 修飾符 delegate 返回類型 指代名稱(形式參數(shù)列表)如:delegate void Mydelegate(int i);聲明了一個指代,返回類型為空,參數(shù)類型為int delegate void Mydelegate(int i);class AppMain( )
11、 public static void Main( ) Mydelegate md=new Mydelegate(DelegatePara); /將指代對應方法DelegatePara( ) md(21);/md已經(jīng)成為方法DelegatePara的指代 CallDelegate(md); / 將指代md作為方法的參數(shù) public static void DelegatePara(int i) Console.WriteLine(“0”,i); public static void CallDelegate(Mydelegate a) a(21);using System;delegate
12、void Mydelegate( );public class Myclass public void Method1( ) Console.WriteLine(“方法一”); public void Method2( ) Console.WriteLine(“方法二”); public class Mainclass static void Main( ) Myclass p=new Myclass( ); Mydelegate d=new Mydelegate(p.Method1); d( ); d=new Mydelegate(p.method2); d( ); using System
13、;public class AddFunc public static void Add( int f,int s) int result=f+s;public class UseAdd protected int first; protected int second; public delegate void Mydelegate(int first ,int second); public Mydelegate ma;public UseAdd(int f,int s) this.first=f; this.second=s;public void Invoke( ) if(ma!=nu
14、ll) ma(first,second); public class AppMain( ) static void Main( ) /生成一個類實例 UseAdd p=new UseAdd(12,15);/生成一個指代實例,對應于AddFunc.Add方法 p.ma=new UseAdd.MyDelegate(AddFunc.Add);/調用指代方法 p.Invoke( ); 在該例中的指代實現(xiàn)是在該例中的指代實現(xiàn)是“+”的運算。的運算。using System;delegate void Mydelegate(string s);class Myclass public static voi
15、d First(string s) Console.WriteLine(“First 0”,s); public staitc void Second(string s)Console.WriteLine(“Second 0”,s); public static void Third(string s)Console.WriteLine(“Third 0”,s);public static void Main( ) Mydelegate a,b,c,d; a=new Mydelegate(First); b=new Mydelegate(Second); c=new Mydelegate(Th
16、ird); d=a+b+c; a(“beijing”); b(“shanghai”); c(“hangzhou”); d(“chongqing”); 事件是在指代的基礎上實現(xiàn)的一種通知機制,比如一個按紐的雙擊就是一個事件,這個事件的發(fā)生可以通知相關的程序進行處理。事件的工作過程為:關心某個事件的對象向能發(fā)出事件的對象進行事件處理程序的注冊;當事件發(fā)生時,會調用所有注冊的事件處理程序。事件處理程序要用指代來表示,事件就是指代實例。聲明一個事件的方式:修飾符 event 指代類型名 事件名如: public delegate void Mydelegate( ); event Mydelegate
17、 MyEvent;事件注冊是要告訴事件的發(fā)出者需要通知的對象。事件注冊的實質就是向指代的調用列表中添加方法。事件注冊要使用+=運算符。如:事件名+=指代實例; 事件名+=new 指代類名(方法名);事件注冊的移除則用運算符事件名指代實例;事件名new 指代類名(方法);事件的發(fā)生,就是對事件對應的指代的調用,也就是指代的調用列表中所包含的方法的調用。格式為:事件名(參數(shù));事件典型應用中,指代的格式為delegate void 指代名(object sender,EventArgs e);指代中的兩個參數(shù)分別表示事件的發(fā)出者及事件發(fā)生時的一些參數(shù)。/聲明指代public delegate void EventHandler(object sender,EventArgs e);public event EventHandler Click;/聲明事件public void OnClick(EventArgs e)/調用事件 if(Click!=null) Click(this,e);using System;namespace ConsoleApplication1public class EventClasspublic delegate void Mydelegate( );public event Mydelegate MyEvent;public v
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加工安裝服務合同范本
- 別墅家具購買合同范本
- 公司舊車銷售合同范例
- 乙方工地材料合同范例
- 養(yǎng)生館共享店鋪合同范例
- 電源防雷插座板行業(yè)深度研究報告
- 中國電動拉鉚槍項目投資可行性研究報告
- led設備購買合同范本
- 制種水稻合同范本
- 公司外聘員工合同范例
- 2023年上海青浦區(qū)區(qū)管企業(yè)統(tǒng)一招考聘用筆試題庫含答案解析
- 2023版押品考試題庫必考點含答案
- 植物之歌觀后感
- 空氣能熱泵安裝示意圖
- 建筑工程施工質量驗收規(guī)范檢驗批填寫全套表格示范填寫與說明
- 2020年中秋國慶假日文化旅游市場安全生產檢查表
- 昆明天大礦業(yè)有限公司尋甸縣金源磷礦老廠箐-小凹子礦段(擬設)采礦權出讓收益評估報告
- 心有榜樣行有力量 -從冬奧冠軍徐夢桃身上感受青春奮斗初中主題班會
- GB/T 3860-1995文獻敘詞標引規(guī)則
- 七年級英語下冊閱讀理解10篇
- 設計質量、進度保證措施
評論
0/150
提交評論