成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

學習C#接口編程——C#接口映射

開發 后端
接口(interface)用來定義一種程序的協定。實現接口的類或者結構要與接口的定義嚴格一致。本文我們來了解顯式實現C#接口成員的主要方法。

類必須為在基類表中列出的所有接口的成員提供具體的實現。在類中定位C#接口成員的實現稱之為接口映射(interface mapping )。

映射,數學上表示一一對應的函數關系。C#接口映射的含義也是一樣,接口通過類來實現,那么對于在接口中定義的每一個成員,都應該對應著類的一個成員來為它提供具體的實現。

類的成員及其C#接口映射成員之間必須滿足下列條件:

· 如果A和B都是成員方法,那么A和B的名稱、類型、形參表(包括參數個數和每一個參數的類型)都應該是一致的。

· 如果A和B都是屬性,那么A和B的名稱、類型應當一致,而且A和B的訪問器也是類似的。但如果A不是顯式接口成員執行體,A允許增加自己的訪問器。

· 如果A和B都是時間那么A和B的名稱、類型應當一致。

· 如果A和B都是索引指示器,那么A和B的類型、形參表(包括參數個數和每一個參數的類型)應當一致。而且A和B的訪問器也是類似的。但如果A不是顯式接口成員執行體,A允許增加自己的訪問器。

那么,對于一個接口成員,怎樣確定由哪一個類的成員來實現呢?即一個接口成員映射的是哪一個類的成員?在這里,我們敘述一下接口映射的過程。假設類C實現了一個接口IInterface,Member是接口IInterface中的一個成員,在定位由誰來實現接口成員Member,即Member的映射過程是這樣的:

1、如果C中存在著一個顯式接口成員執行體,該執行體與接口IInterface 及其成員Member相對應,則由它來實現Member 成員。

2、如果條件(1)不滿足,且C中存在著一個非靜態的公有成員,該成員與接口成員Member相對應,則由它來實現Member 成員。

3、如果上述條件仍不滿足,則在類C定義的基類列表中尋找一個C 的基類D,用D來代替C。

4、重復步驟1-3 ,遍歷C的所有直接基類和非直接基類,直到找到一個滿足條件的類的成員。

5、如果仍然沒有找到,則報告錯誤。

下面是一個調用基類方法來實現接口成員的例子。類Class2 實現了接口Interface1,類Class2 的基類Class1 的成員也參與了接口的映射,也就是說類Class2 在對接口Interface1進行實現時,使用了類Class1提供的成員方法F來實現接口Interface1的成員方法F:

C#接口映射代碼1 

 

注意:接口的成員包括它自己定義的成員,而且包括該接口所有父接口定義的成員。在接口映射時,不僅要對接口定義體中顯式定義的所有成員進行映射,而且要對隱式地從父接口那里繼承來的所有接口成員進行映射。

在進行C#接口映射時,還要注意下面兩點:

· 在決定由類中的哪個成員來實現接口成員時,類中顯式說明的接口成員比其它成員優先實現。

· 使用Private、protected和static修飾符的成員不能參與實現接口映射。例如:

C#接口映射代碼2  

例子中成員ICloneable.Clone稱為接口ICloneable的成員Clone的實現者,因為它是顯式說明的接口成員,比其它成員有著更高的優先權。

如果一個類實現了兩個或兩個以上名字、類型和參數類型都相同的接口,那么類中的一個成員就可能實現所有這些接口成員:

C#接口映射代碼3 

這里,接口IControl和IForm的方法Paint都映射到了類Page中的Paint方法。當然也可以分別用顯式的接口成員分別實現這兩個方法:

C#接口映射代碼4 

上面的兩種寫法都是正確的。但是如果接口成員在繼承中覆蓋了父接口的成員,那么對該接口成員的實現就可能必須映射到顯式接口成員執行體。看下面的例子:

C#接口映射代碼5 

 接口IDerived從接口IBase中繼承,這時接口IDerived的成員方法覆蓋了父接口的成員方法。因為這時存在著同名的兩個接口成員,那么對這兩個接口成員的實現如果不采用顯式接口成員執行體,編譯器將無法分辨接口映射。所以,如果某個類要實現接口IDerived,在類中必須至少定義一個顯式接口成員執行體。采用下面這些寫法都是合理的:

C#接口映射代碼6

另一種情況是,如果一個類實現了多個接口,這些接口又擁有同一個父接口,這個父接口只允許被實現一次。

 C#接口映射代碼7 

 上面的例子中,類ComboBox實現了三個接口:IControl,ITextBox和IListBox。如果認為ComboBox不僅實現了IControl接口,而且在實現ITextBox和IListBox的同時,又分別實現了它們的父接口IControl。實際上,對接口ITextBox 和IListBox 的實現,分享了對接口IControl 的實現。

現在,我們對C#接口映射有了較全面的認識。

【編輯推薦】

  1. C#3.5新特性的介紹
  2. C#中DirectSound錄音的使用
  3. C#擴展方法性能測試對比
  4. C#多標簽瀏覽器功能的擴展
  5. C#標簽的制作:多標簽的實現
責任編輯:book05 來源: 新浪博客
相關推薦

2009-08-24 09:55:26

C#接口轉換

2009-08-24 10:06:31

C#接口成員

2009-08-25 10:57:09

C#接口

2009-08-25 10:44:08

C#接口定義接口

2009-08-24 10:31:37

C#接口繼承

2009-08-31 18:17:32

C#接口編程

2009-08-31 17:02:28

C#接口編程

2009-08-24 10:47:45

C#接口重實現

2009-08-20 18:06:18

學習C#接口

2009-08-12 15:55:12

C#接口定義

2009-08-25 17:55:52

C#實現Strateg

2009-08-31 13:18:09

C# IWebMess

2009-08-14 17:58:05

C#接口方法

2009-08-31 15:55:17

C#實現Strateg

2009-08-03 18:08:39

C# ICloneab

2009-08-24 11:20:03

C#接口

2009-08-10 10:04:25

C#抽象類C#接口

2009-08-27 17:59:56

C#接口定義

2009-08-07 08:53:52

C# ICloneab

2009-08-31 16:47:39

C#接口的定義
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲精品精品国产亚洲综合 | 亚洲啪啪 | 亚洲精品欧美一区二区三区 | 欧美综合一区 | 精品91| 国产婷婷精品 | 91偷拍精品一区二区三区 | 欧美综合精品 | 狠狠视频 | 国产精品视屏 | 日韩二三区 | 精品成人一区二区 | 日韩和的一区二在线 | 欧美一区二区三区电影 | 亚洲天堂影院 | 久草视频在线播放 | 国产精品无码专区在线观看 | 一片毛片 | 成人精品免费 | 国产成人精品久久二区二区 | 毛片av免费在线观看 | 亚洲一区二区 | 国产黄色电影 | 最新中文字幕 | 少妇一区二区三区 | 色综合一区二区 | 国产亚洲第一页 | 女人精96xxx免费网站p | 国产农村妇女毛片精品久久麻豆 | 亚洲欧美日韩精品久久亚洲区 | 久久精品a级毛片 | 免费国产视频在线观看 | 国产a视频| 日本欧美在线视频 | 亚洲精品免费视频 | 毛片站| 日韩在线观看网站 | 久久av在线播放 | 国产精品久久久久免费 | 国产不卡视频 | 免费艹逼视频 |