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

學習C#接口編程——顯式實現C#接口成員

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

為了實現C#接口,類可以定義顯式接口成員執行體(Explicit interface member

implementations)。顯式C#接口成員執行體可以是一個方法、一個屬性、一個事件或者是一個索引指示器的定義,定義與該成員對應的全權名應保持一致。

顯式實現C#接口成員圖1

上面的代碼中ICloneable.Clone 和IComparable.CompareTo 就是顯式接口成員執行體。

說明:

· 不能在方法調用、屬性訪問以及索引指示器訪問中通過全權名訪問顯式接口成員執行體。事實上,顯式接口成員執行體只能通過接口的實例,僅僅引用接口的成員名稱來訪問。

· 顯式C#接口成員執行體不能使用任何訪問限制符,也不能加上abstract, virtual, override或static 修飾符。

· 顯式C#接口成員執行體和其他成員有著不同的訪問方式。因為不能在方法調用、屬性訪問以及索引指示器訪問中通過全權名訪問,顯式接口成員執行體在某種意義上是私有的。但它們又可以通過接口的實例訪問,也具有一定的公有性質。

· 只有類在定義時,把接口名寫在了基類列表中,而且類中定義的全權名、類型和返回類型都與顯式接口成員執行體完全一致時,顯式接口成員執行體才是有效的,例如:

顯式實現C#接口成員圖2

 

使用顯式C#接口成員執行體通常有兩個目的:

· 因為顯式接口成員執行體不能通過類的實例進行訪問,這就可以從公有接口中把接口的實現部分單獨分離開。如果一個類只在內部使用該接口,而類的使用者不會直接使用到該接口,這種顯式接口成員執行體就可以起到作用。

· 顯式接口成員執行體避免了接口成員之間因為同名而發生混淆。如果一個類希望對名稱和返回類型相同的接口成員采用不同的實現方式,這就必須要使用到顯式接口成員執行體。如果沒有顯式接口成員執行體,那么對于名稱和返回類型不同的接口成員,類也無法進行實現。

下面的定義是無效的,因為Shape 定義時基類列表中沒有出現接口IComparable。

顯式實現C#接口成員圖3

 

在Ellipse中定義ICloneable.Clone是錯誤的,因為Ellipse即使隱式地實現了接口ICloneable,ICloneable仍然沒有顯式地出現在Ellipse定義的基類列表中。

接口成員的全權名必須對應在接口中定義的成員。如下面的例子中,Paint的顯式接口成員執行體必須寫成IControl.Paint。

顯式實現C#接口成員圖4

 

實現接口的類可以顯式實現該接口的成員。當顯式實現某成員時,不能通過類實例訪問該成員,而只能通過該接口的實例訪問該成員。顯式接口實現還允許程序員繼承共享相同成員名的兩個接口,并為每個接口成員提供一個單獨的實現。

下面例子中同時以公制單位和英制單位顯示框的尺寸。Box類繼承IEnglishDimensions和IMetricDimensions兩個接口,它們表示不同的度量衡系統。兩個接口有相同的成員名 Length 和 Width。

顯式實現C#接口成員圖5

 

輸出:Length(in): 30,Width (in): 20,Length(cm): 76.2,Width (cm): 50.8

代碼討論:如果希望默認度量采用英制單位,請正常實現 Length 和 Width 這兩個方法,并從 IMetricDimensions 接口顯式實現 Length 和 Width 方法:

顯式實現C#接口成員圖6

 

這種情況下,可以從類實例訪問英制單位,而從接口實例訪問公制單位:

顯式實現C#接口成員圖7

至此,顯式實現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 11:02:52

C#接口映射

2009-08-27 14:29:28

顯式實現接口

2009-08-31 17:02:28

C#接口編程

2009-08-24 10:47:45

C#接口重實現

2009-08-03 18:26:18

C#定義接口成員

2009-08-25 10:57:09

C#接口

2009-08-25 10:44:08

C#接口定義接口

2009-08-24 10:31:37

C#接口繼承

2009-08-25 17:55:52

C#實現Strateg

2009-08-31 15:55:17

C#實現Strateg

2009-09-02 14:26:50

C#對接口成員訪問

2009-08-31 18:17:32

C#接口編程

2009-08-20 18:06:18

學習C#接口

2009-08-31 16:48:02

C#實現IDispos

2009-08-31 16:23:13

C#接口

2009-09-04 13:22:31

C#實現多個接口

2009-09-01 18:29:24

C#實現多個接口

2009-08-12 15:55:12

C#接口定義

2009-08-31 18:01:41

C#接口事件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人精品欧美一级 | 欧美国产亚洲一区二区 | 成人精品毛片国产亚洲av十九禁 | 色综合久久天天综合网 | 中文字幕 国产精品 | 欧美日韩综合 | 97伦理影院 | 亚洲精品乱码久久久久久久久 | 本地毛片 | 韩日中文字幕 | 亚洲精品日韩一区二区电影 | 国产成人免费视频网站视频社区 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲成人免费电影 | 免费大黄视频 | 亚洲国产精品网站 | 日韩av在线一区二区 | 一区二区视频在线观看 | 99re6在线视频精品免费 | 欧美在线二区 | 亚洲毛片一区二区 | 日本精品裸体写真集在线观看 | 一区二区免费 | 美女在线观看国产 | 欧美精品福利视频 | 免费观看一级特黄欧美大片 | 精品视频一区二区 | 亚洲一二视频 | 色姑娘综合网 | 91精品国产91久久久 | 夜色www国产精品资源站 | 日日干干| 天天色综网| 日韩av电影院 | 狠狠草视频 | 99re在线视频 | 国产丝袜一区二区三区免费视频 | 国产精品美女久久久久久免费 | 一区二区免费视频 | 蜜桃视频一区二区三区 | 五月婷六月丁香 |