第五節、實現介面
1、顯式實現介面成員
為了實現介面,類可以定義顯式介面成員執行體(Explicit interface member implementations)。顯式介面成員執行體可以是一個方法、一個屬性、一個事件或者是一個索引指標的定義,定義與該成員對應的全權名應保持一致。
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 就是顯式介面成員執行體。
說明:
1、不能在方法調用、屬性訪問以及索引指標訪問中通過全權名訪問顯式介面成員執行體。事實上,顯式介面成員執行體只能通過介面的執行個體,僅僅引用介面的成員名稱來訪問。
2、顯式介面成員執行體不能使用任何訪問限制符,也不能加上abstract, virtual, override或static 修飾符。
3、顯式介面成員執行體和其他成員有著不同的訪問方式。因為不能在方法調用、屬性訪問以及索引指標訪問中通過全權名訪問,顯式介面成員執行體在某種意義上是私人的。但它們又可以通過介面的執行個體訪問,也具有一定的公有性質。
4、只有類在定義時,把介面名寫在了基類列表中,而且類中定義的全權名、類型和傳回型別都與顯式介面成員執行體完全一致時,顯式介面成員執行體才是有效,例如:
class Shape: ICloneable {
object ICloneable.Clone( ) {…}
int IComparable.CompareTo(object other) {…}
}
使用顯式介面成員執行體通常有兩個目的:
1、因為顯式介面成員執行體不能通過類的執行個體進行訪問,這就可以從公有介面中把介面的實現部分單獨分離開。如果一個類只在內部使用該介面,而類的使用者不會直接使用到該介面,這種顯式介面成員執行體就可以起到作用。
2、顯式介面成員執行體避免了介面成員之間因為同名而發生混淆。如果一個類希望對名稱和傳回型別相同的介面成員採用不同的實現方式,這就必須要使用到顯式介面成員執行體。如果沒有顯式介面成員執行體,那麼對於名稱和傳回型別不同的介面成員,類也無法進行實現。
下面的定義是無效的,因為Shape 定義時基類列表中沒有出現介面IComparable。
class Shape: ICloneable
{
object ICloneable.Clone( ) {…}
}
class Ellipse: Shape
{
object ICloneable.Clone( ) {…}
}
共7頁: 上一頁 1 [2][3][4][5][6][7]下一頁