推薦:基于C#的接口基礎(chǔ)教程之四
第四節(jié)、訪問(wèn)接口 對(duì)接口成員的訪問(wèn) 對(duì)接口方法的調(diào)用和采用索引指示器訪問(wèn)的規(guī)則與類中的情況也是相同的。如果底層成員的命名與繼承而來(lái)的高層成員一致,那么底層成員將覆蓋同
第五節(jié)、實(shí)現(xiàn)接口
1、顯式實(shí)現(xiàn)接口成員
為了實(shí)現(xiàn)接口,類可以定義顯式接口成員執(zhí)行體(Explicit interface member implementations)。顯式接口成員執(zhí)行體可以是一個(gè)方法、一個(gè)屬性、一個(gè)事件或者是一個(gè)索引指示器的定義,定義與該成員對(duì)應(yīng)的全權(quán)名應(yīng)保持一致。
using System ;
interface ICloneable {
object Clone( ) ;
}
interface IComparable {
int CompareTo(object other) ;
}
class ListEntry: ICloneable, IComparable {
object ICloneable.Clone( ) {…}
int IComparable.CompareTo(object other) {…}
}
上面的代碼中ICloneable.Clone 和IComparable.CompareTo 就是顯式接口成員執(zhí)行體。
說(shuō)明:
1、不能在方法調(diào)用、屬性訪問(wèn)以及索引指示器訪問(wèn)中通過(guò)全權(quán)名訪問(wèn)顯式接口成員執(zhí)行體。事實(shí)上,顯式接口成員執(zhí)行體只能通過(guò)接口的實(shí)例,僅僅引用接口的成員名稱來(lái)訪問(wèn)。
2、顯式接口成員執(zhí)行體不能使用任何訪問(wèn)限制符,也不能加上abstract, virtual, override或static 修飾符。
3、顯式接口成員執(zhí)行體和其他成員有著不同的訪問(wèn)方式。因?yàn)椴荒茉诜椒ㄕ{(diào)用、屬性訪問(wèn)以及索引指示器訪問(wèn)中通過(guò)全權(quán)名訪問(wèn),顯式接口成員執(zhí)行體在某種意義上是私有的。但它們又可以通過(guò)接口的實(shí)例訪問(wèn),也具有一定的公有性質(zhì)。
4、只有類在定義時(shí),把接口名寫在了基類列表中,而且類中定義的全權(quán)名、類型和返回類型都與顯式接口成員執(zhí)行體完全一致時(shí),顯式接口成員執(zhí)行體才是有效的,例如:
class Shape: ICloneable {
object ICloneable.Clone( ) {…}
int IComparable.CompareTo(object other) {…}
}
使用顯式接口成員執(zhí)行體通常有兩個(gè)目的:
1、因?yàn)轱@式接口成員執(zhí)行體不能通過(guò)類的實(shí)例進(jìn)行訪問(wèn),這就可以從公有接口中把接口的實(shí)現(xiàn)部分單獨(dú)分離開。如果一個(gè)類只在內(nèi)部使用該接口,而類的使用者不會(huì)直接使用到該接口,這種顯式接口成員執(zhí)行體就可以起到作用。
2、顯式接口成員執(zhí)行體避免了接口成員之間因?yàn)橥l(fā)生混淆。如果一個(gè)類希望對(duì)名稱和返回類型相同的接口成員采用不同的實(shí)現(xiàn)方式,這就必須要使用到顯式接口成員執(zhí)行體。如果沒(méi)有顯式接口成員執(zhí)行體,那么對(duì)于名稱和返回類型不同的接口成員,類也無(wú)法進(jìn)行實(shí)現(xiàn)。
下面的定義是無(wú)效的,因?yàn)镾hape 定義時(shí)基類列表中沒(méi)有出現(xiàn)接口IComparable。
class Shape: ICloneable
{
object ICloneable.Clone( ) {…}
}
class Ellipse: Shape
{
object ICloneable.Clone( ) {…}
}
分享:基于C#的接口基礎(chǔ)教程之三
第三節(jié) 定義接口成員 接口可以包含一個(gè)和多個(gè)成員,這些成員可以是方法、屬性、索引指示器和事件,但不能是常量、域、操作符、構(gòu)造函數(shù)或析構(gòu)函數(shù),而且不能包含任何靜態(tài)成員。接口定
新聞熱點(diǎn)
疑難解答
圖片精選