在進行介面對映時,還要注意下面兩點:
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。欲瞭解這方面的知識,請看下一節-介面轉換。
SwiftUI 初體驗 6 實現複雜介面
首先看目標效果是實現乙個列表,巢狀可以橫向滑動的row,頭部是banner 暫時佔位,後面的章節實現 定義最小的單位item renderingmode設定original是顯示影象本身,resizable必須在frame修改前設定,padding可以調整item之間的位置關係 struct spe...
日誌6月29日 課表介面和畢業照介面實現
課表介面 課表設計參考了網上比較成熟的介面設計 wxml 採用scroll view布局。pages courselist courselist.wxml top class top text 周 true class scroll height 1200rpx width 730rpx displ...
VC6無負擔實現XP風格介面
vc 6無負擔實現xp 風格介面 關於讓自己的程式介面實現xp 風格這個問題,在網上的討論很多,大多數的作法都是寫乙個 manifest 檔案,然後將檔名改一下,比如 exe 檔案為test.exe 就將這個 manifest 檔案改名成 test.exe.manifest 並將其和 test.ex...