基於C 的介面基礎教程之五 6

2021-03-31 08:56:59 字數 1876 閱讀 2914

在進行介面對映時,還要注意下面兩點:

1、在決定由類中的哪個成員來實現介面成員時,類中顯式說明的介面成員比其它成員優先實現。

2、使用private、protected和static修飾符的成員不能參與實現介面對映。例如:

inte***ce icloneable

class c: icloneable

public object clone( )

} 例子中成員icloneable.clone 稱為介面icloneable 的成員clone 的實現者,因為它是顯式說明的介面成員,比其它成員有著更高的優先權。

如果乙個類實現了兩個或兩個以上名字、型別和引數型別都相同的介面,那麼類中的乙個成員就可能實現所有這些介面成員:

inte***ce icontrol

inte***ce iform

class page: icontrol, iform

} 這裡,介面icontrol和iform的方法paint都對映到了類page中的paint方法。當然也可以分別用顯式的介面成員分別實現這兩個方法:

inte***ce icontrol

inte***ce iform

class page: icontrol, iform

public void iform.paint( )

} 上面的兩種寫法都是正確的。但是如果介面成員在繼承中覆蓋了父介面的成員,那麼對該介面成員的實現就可能必須對映到顯式介面成員執行體。看下面的例子:

inte***ce ibase

} inte***ce iderived: ibase

介面iderived從介面ibase中繼承,這時介面iderived 的成員方法覆蓋了父介面的成員方法。因為這時存在著同名的兩個介面成員,那麼對這兩個介面成員的實現如果不採用顯式介面成員執行體,編譯器將無法分辨介面對映。所以,如果某個類要實現介面iderived,在類中必須至少定義乙個顯式介面成員執行體。採用下面這些寫法都是合理的:

//一:對兩個介面成員都採用顯式介面成員執行體來實現

lass c: iderived

int iderived.p( )

} //二:對ibase 的介面成員採用顯式介面成員執行體來實現

class c: iderived

public int p( )

} //三:對iderived 的介面成員採用顯式介面成員執行體來實現

class c: iderived

int iderived.p( )

} 另一種情況是,如果乙個類實現了多個介面,這些介面又擁有同乙個父介面,這個父介面只允許被實現一次。

using system ;

inte***ce icontrol

inte***ce ilistbox: icontrol

class ***bobox: icontrol, itextbox, ilistbox

void itextbox.settext(string text)

void ilistbox.setitems(string items)

} 上面的例子中,類***bobox實現了三個介面:icontrol,itextbox和ilistbox。如果認為***bobox不僅實現了icontrol介面,而且在實現itextbox和ilistbox的同時,又分別實現了它們的父介面icontrol。實際上,對介面itextbox 和ilistbox 的實現,分享了對介面icontrol 的實現。

我們對c#的介面有了較全面的認識,基本掌握了怎樣應用c#的介面程式設計,但事實上,c#的不僅僅應用於.***平台,它同樣支援以前的***,可以實現***類到.***類的轉換,如c#呼叫api。欲瞭解這方面的知識,請看下一節-介面轉換。

基於C 的介面基礎教程之五

usingsystem inte ceicloneable inte ceicomparable classlistentry icloneable,icomparable inticomparable.compareto objectother classshape icloneable inti...

基於C 的介面基礎教程之五 2

使用顯式介面成員執行體通常有兩個目的 1 因為顯式介面成員執行體不能通過類的例項進行訪問,這就可以從公有介面中把介面的實現部分單獨分離開。如果乙個類只在內部使用該介面,而類的使用者不會直接使用到該介面,這種顯式介面成員執行體就可以起到作用。2 顯式介面成員執行體避免了介面成員之間因為同名而發生混淆。...

基於C 的介面基礎教程之五 3

2 繼承介面實現 介面具有不變性,但這並不意味著介面不再發展。類似於類的繼承性,介面也可以繼承和發展。注意 介面繼承和類繼承不同,首先,類繼承不僅是說明繼承,而且也是實現繼承 而介面繼承只是說明繼承。也就是說,派生類可以繼承基類的方法實現,而派生的介面只繼承了父介面的成員方法說明,而沒有繼承父介面的...