溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎樣實(shí)現(xiàn)C#接口成員

發(fā)布時(shí)間:2021-11-24 09:19:58 來源:億速云 閱讀:276 作者:柒染 欄目:編程語言

這篇文章給大家介紹怎樣實(shí)現(xiàn)C#接口成員,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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

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

怎樣實(shí)現(xiàn)C#接口成員

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

說明:

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

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

· 顯式C#接口成員執(zhí)行體和其他成員有著不同的訪問方式。因?yàn)椴荒茉诜椒ㄕ{(diào)用、屬性訪問以及索引指示器訪問中通過全權(quán)名訪問,顯式接口成員執(zhí)行體在某種意義上是私有的。但它們又可以通過接口的實(shí)例訪問,也具有一定的公有性質(zhì)。

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

怎樣實(shí)現(xiàn)C#接口成員

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

· 因?yàn)轱@式接口成員執(zhí)行體不能通過類的實(shí)例進(jìn)行訪問,這就可以從公有接口中把接口的實(shí)現(xiàn)部分單獨(dú)分離開。如果一個類只在內(nèi)部使用該接口,而類的使用者不會直接使用到該接口,這種顯式接口成員執(zhí)行體就可以起到作用。

· 顯式接口成員執(zhí)行體避免了接口成員之間因?yàn)橥l(fā)生混淆。如果一個類希望對名稱和返回類型相同的接口成員采用不同的實(shí)現(xiàn)方式,這就必須要使用到顯式接口成員執(zhí)行體。如果沒有顯式接口成員執(zhí)行體,那么對于名稱和返回類型不同的接口成員,類也無法進(jìn)行實(shí)現(xiàn)。

下面的定義是無效的,因?yàn)镾hape 定義時(shí)基類列表中沒有出現(xiàn)接口IComparable。

怎樣實(shí)現(xiàn)C#接口成員

在Ellipse中定義ICloneable.Clone是錯誤的,因?yàn)镋llipse即使隱式地實(shí)現(xiàn)了接口ICloneable,ICloneable仍然沒有顯式地出現(xiàn)在Ellipse定義的基類列表中。

接口成員的全權(quán)名必須對應(yīng)在接口中定義的成員。如下面的例子中,Paint的顯式接口成員執(zhí)行體必須寫成IControl.Paint。

怎樣實(shí)現(xiàn)C#接口成員

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

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

怎樣實(shí)現(xiàn)C#接口成員

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

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

怎樣實(shí)現(xiàn)C#接口成員

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

怎樣實(shí)現(xiàn)C#接口成員

關(guān)于怎樣實(shí)現(xiàn)C#接口成員就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI