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

C#對(duì)接口成員訪問(wèn)分析

開發(fā) 后端
這里介紹C#對(duì)接口成員訪問(wèn),如果底層成員的命名與繼承而來(lái)的高層成員一致,那么底層成員將覆蓋同名的高層成員。

在向大家詳細(xì)介紹C#對(duì)接口成員訪問(wèn)之前,首先讓大家了解下C#對(duì)接口方法的調(diào)用,然后全面介紹C#對(duì)接口成員訪問(wèn)。

C#對(duì)接口成員訪問(wèn)

C#對(duì)接口方法的調(diào)用和采用索引指示器訪問(wèn)的規(guī)則與類中的情況也是相同的。如果底層成員的命名與繼承而來(lái)的高層成員一致,那么底層成員將覆蓋同名的高層成員。但由于接口支持多繼承,在多繼承中,如果兩個(gè)父接口含有同名的成員,這就產(chǎn)生了二義性(這也正是C#中取消了類的多繼承機(jī)制的原因之一),這時(shí)需要進(jìn)行顯式的定義:

  1. using System ;  
  2. interface ISequence {  
  3. int Count { get; set; }  
  4. }  
  5. interface IRing {  
  6. void Count(int i) ;  
  7. }  
  8. interface IRingSequence: ISequence, IRing { }  
  9. class CTest {  
  10. void Test(IRingSequence rs) {  
  11. //rs.Count(1) ; 錯(cuò)誤, Count 有二義性  
  12. //rs.Count = 1; 錯(cuò)誤, Count 有二義性  
  13. ((ISequence)rs).Count = 1; // 正確  
  14. ((IRing)rs).Count(1) ; // 正確調(diào)用IRing.Count  
  15. }  

上面的例子中,前兩條語(yǔ)句rs .Count(1)和rs .Count = 1會(huì)產(chǎn)生二義性,從而導(dǎo)致編譯時(shí)錯(cuò)誤,因此必須顯式地給rs 指派父接口類型,這種指派在運(yùn)行時(shí)不會(huì)帶來(lái)額外的開銷。

再看下面的例子:

  1. using System ;  
  2. interface IInteger {  
  3. void Add(int i) ;  
  4. }  
  5. interface IDouble {  
  6. void Add(double d) ;  
  7. }  
  8. interface INumber: IInteger, IDouble {}  
  9. class CMyTest {  
  10. void Test(INumber Num) {  
  11.  
  12. // Num.Add(1) ; 錯(cuò)誤  
  13. Num.Add(1.0) ; // 正確  
  14. ((IInteger)n).Add(1) ; // 正確  
  15. ((IDouble)n).Add(1) ; // 正確  
  16. }  

調(diào)用Num.Add(1) 會(huì)導(dǎo)致二義性,因?yàn)楹蜻x的重載方法的參數(shù)類型均適用。但是,調(diào)用Num.Add(1.0) 是允許的,因?yàn)?.0 是浮點(diǎn)數(shù)參數(shù)類型與方法IInteger.Add()的參數(shù)類型不一致,這時(shí)只有IDouble.Add 才是適用的。不過(guò)只要加入了顯式的指派,就決不會(huì)產(chǎn)生二義性。

接口的多重繼承的問(wèn)題也會(huì)帶來(lái)C#對(duì)接口成員訪問(wèn)上的問(wèn)題。例如:

  1. interface IBase {  
  2. void FWay(int i) ;  
  3. }  
  4. interface ILeft: IBase {  
  5. new void FWay (int i) ;  
  6. }  
  7. interface IRight: IBase  
  8. { void G( ) ; }  
  9. interface IDerived: ILeft, IRight { }  
  10. class CTest {  
  11. void Test(IDerived d) {  
  12. d. FWay (1) ; // 調(diào)用ILeft. FWay  
  13. ((IBase)d). FWay (1) ; // 調(diào)用IBase. FWay  
  14. ((ILeft)d). FWay (1) ; // 調(diào)用ILeft. FWay  
  15. ((IRight)d). FWay (1) ; // 調(diào)用IBase. FWay  
  16. }  

上例中,方法IBase.FWay在派生的接口ILeft中被Ileft的成員方法FWay覆蓋了。所以對(duì)d. FWay (1)的調(diào)用實(shí)際上調(diào)用了。雖然從IBase-> IRight-> IDerived這條繼承路徑上來(lái)看,ILeft.FWay方法是沒有被覆蓋的。我們只要記住這一點(diǎn):一旦成員被覆蓋以后,所有對(duì)其的訪問(wèn)都被覆蓋以后的成員"攔截"了。

【編輯推薦】

  1. C# this關(guān)鍵字詳解
  2. C#調(diào)用析構(gòu)方法詳解
  3. C#釋放托管資源簡(jiǎn)單描述
  4. C#單路代理簡(jiǎn)單分析
  5. C#文法產(chǎn)生式概述
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2009-08-03 18:26:18

C#定義接口成員

2009-08-24 10:06:31

C#接口成員

2009-08-31 17:02:28

C#接口編程

2010-07-26 09:20:48

C#

2009-08-18 10:30:30

C#枚舉

2009-08-06 16:01:30

C#接口成員

2009-08-24 11:02:52

C#接口映射

2009-08-24 09:55:26

C#接口轉(zhuǎn)換

2009-08-24 11:20:03

C#接口

2009-08-25 10:44:08

C#接口定義接口

2009-08-31 13:18:09

C# IWebMess

2009-08-14 17:58:05

C#接口方法

2009-08-24 10:31:37

C#接口繼承

2009-08-31 15:55:17

C#實(shí)現(xiàn)Strateg

2009-08-03 18:08:39

C# ICloneab

2009-08-25 10:57:09

C#接口

2009-08-25 17:55:52

C#實(shí)現(xiàn)Strateg

2009-08-10 10:04:25

C#抽象類C#接口

2009-08-27 13:27:50

C# this保留字

2009-08-26 10:34:59

C# Hashtabl
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91精品国产综合久久福利软件 | 亚洲二区在线 | 很黄很污的网站 | 亚洲精品视频导航 | 国产一区二区三区在线免费 | 一级毛片色一级 | 久久专区| 欧美日本在线观看 | 精品国产精品国产偷麻豆 | 中文字幕日韩一区 | 久久久久久亚洲精品不卡 | 国产精品一区二区三区在线 | 成人欧美一区二区三区在线观看 | 成人在线亚洲 | 午夜一区二区三区 | 中文字幕一区二区三区精彩视频 | 中文字幕第7页 | 九九视频在线观看 | 国产精品欧美一区二区三区不卡 | 日韩三级免费网站 | 国产区免费视频 | 久久一区 | 成人国产精品久久 | 日韩精品999 | 精品国产乱码一区二区三区 | 欧美日韩不卡在线 | 黑人中文字幕一区二区三区 | 亚洲五码久久 | 色婷婷久久久亚洲一区二区三区 | 国产午夜精品一区二区三区在线观看 | 国产精品国产三级国产aⅴ原创 | 久久91 | 久免费视频| 亚洲欧美日韩精品久久亚洲区 | 东方伊人免费在线观看 | 超碰日韩| www.99精品| 精品久久久久香蕉网 | 97视频网站| 91精品国产乱码久久久 | a级在线 |