新聞中心
為了實(shí)現(xiàn)C#接口,類(lèi)可以定義顯式接口成員執(zhí)行體(Explicit interface member

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到羅莊網(wǎng)站設(shè)計(jì)與羅莊網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋羅莊地區(qū)。
implementations)。顯式C#接口成員執(zhí)行體可以是一個(gè)方法、一個(gè)屬性、一個(gè)事件或者是一個(gè)索引指示器的定義,定義與該成員對(duì)應(yīng)的全權(quán)名應(yīng)保持一致。
上面的代碼中ICloneable.Clone 和IComparable.CompareTo 就是顯式接口成員執(zhí)行體。
說(shuō)明:
· 不能在方法調(diào)用、屬性訪(fǎng)問(wèn)以及索引指示器訪(fǎng)問(wèn)中通過(guò)全權(quán)名訪(fǎng)問(wèn)顯式接口成員執(zhí)行體。事實(shí)上,顯式接口成員執(zhí)行體只能通過(guò)接口的實(shí)例,僅僅引用接口的成員名稱(chēng)來(lái)訪(fǎng)問(wèn)。
· 顯式C#接口成員執(zhí)行體不能使用任何訪(fǎng)問(wèn)限制符,也不能加上abstract, virtual, override或static 修飾符。
· 顯式C#接口成員執(zhí)行體和其他成員有著不同的訪(fǎng)問(wèn)方式。因?yàn)椴荒茉诜椒ㄕ{(diào)用、屬性訪(fǎng)問(wèn)以及索引指示器訪(fǎng)問(wèn)中通過(guò)全權(quán)名訪(fǎng)問(wèn),顯式接口成員執(zhí)行體在某種意義上是私有的。但它們又可以通過(guò)接口的實(shí)例訪(fǎng)問(wèn),也具有一定的公有性質(zhì)。
· 只有類(lèi)在定義時(shí),把接口名寫(xiě)在了基類(lèi)列表中,而且類(lèi)中定義的全權(quán)名、類(lèi)型和返回類(lèi)型都與顯式接口成員執(zhí)行體完全一致時(shí),顯式接口成員執(zhí)行體才是有效的,例如:
使用顯式C#接口成員執(zhí)行體通常有兩個(gè)目的:
· 因?yàn)轱@式接口成員執(zhí)行體不能通過(guò)類(lèi)的實(shí)例進(jìn)行訪(fǎng)問(wèn),這就可以從公有接口中把接口的實(shí)現(xiàn)部分單獨(dú)分離開(kāi)。如果一個(gè)類(lèi)只在內(nèi)部使用該接口,而類(lèi)的使用者不會(huì)直接使用到該接口,這種顯式接口成員執(zhí)行體就可以起到作用。
· 顯式接口成員執(zhí)行體避免了接口成員之間因?yàn)橥l(fā)生混淆。如果一個(gè)類(lèi)希望對(duì)名稱(chēng)和返回類(lèi)型相同的接口成員采用不同的實(shí)現(xiàn)方式,這就必須要使用到顯式接口成員執(zhí)行體。如果沒(méi)有顯式接口成員執(zhí)行體,那么對(duì)于名稱(chēng)和返回類(lèi)型不同的接口成員,類(lèi)也無(wú)法進(jìn)行實(shí)現(xiàn)。
下面的定義是無(wú)效的,因?yàn)镾hape 定義時(shí)基類(lèi)列表中沒(méi)有出現(xiàn)接口IComparable。
在Ellipse中定義ICloneable.Clone是錯(cuò)誤的,因?yàn)镋llipse即使隱式地實(shí)現(xiàn)了接口ICloneable,ICloneable仍然沒(méi)有顯式地出現(xiàn)在Ellipse定義的基類(lèi)列表中。
接口成員的全權(quán)名必須對(duì)應(yīng)在接口中定義的成員。如下面的例子中,Paint的顯式接口成員執(zhí)行體必須寫(xiě)成IControl.Paint。
實(shí)現(xiàn)接口的類(lèi)可以顯式實(shí)現(xiàn)該接口的成員。當(dāng)顯式實(shí)現(xiàn)某成員時(shí),不能通過(guò)類(lèi)實(shí)例訪(fǎng)問(wèn)該成員,而只能通過(guò)該接口的實(shí)例訪(fǎng)問(wèn)該成員。顯式接口實(shí)現(xiàn)還允許程序員繼承共享相同成員名的兩個(gè)接口,并為每個(gè)接口成員提供一個(gè)單獨(dú)的實(shí)現(xiàn)。
下面例子中同時(shí)以公制單位和英制單位顯示框的尺寸。Box類(lèi)繼承IEnglishDimensions和IMetricDimensions兩個(gè)接口,它們表示不同的度量衡系統(tǒng)。兩個(gè)接口有相同的成員名 Length 和 Width。
輸出:Length(in): 30,Width (in): 20,Length(cm): 76.2,Width (cm): 50.8
代碼討論:如果希望默認(rèn)度量采用英制單位,請(qǐng)正常實(shí)現(xiàn) Length 和 Width 這兩個(gè)方法,并從 IMetricDimensions 接口顯式實(shí)現(xiàn) Length 和 Width 方法:
這種情況下,可以從類(lèi)實(shí)例訪(fǎng)問(wèn)英制單位,而從接口實(shí)例訪(fǎng)問(wèn)公制單位:
至此,顯式實(shí)現(xiàn)C#接口成員的主要方法就介紹完了。
【編輯推薦】
- C#3.5新特性的介紹
- C#中DirectSound錄音的使用
- C#擴(kuò)展方法性能測(cè)試對(duì)比
- C#多標(biāo)簽瀏覽器功能的擴(kuò)展
- C#標(biāo)簽的制作:多標(biāo)簽的實(shí)現(xiàn)
標(biāo)題名稱(chēng):學(xué)習(xí)C#接口編程——顯式實(shí)現(xiàn)C#接口成員
網(wǎng)站網(wǎng)址:http://m.5511xx.com/article/dpccegc.html


咨詢(xún)
建站咨詢(xún)
