基于C#的接口基礎教程之五(6)
2007/1/9 20:58:09
在進行接口映射時,還要注意下面兩點:
 
    1、在決定由類中的哪個成員來實現接口成員時,類中顯式說明的接口成員比其它成員優先實現。
 
    2、使用Private、protected和static修飾符的成員不能參與實現接口映射。例如:
 
  interface ICloneable {
   object Clone( ) ;
  }
  class C: ICloneable {
   object ICloneable.Clone( ) {…}
   public object Clone( ) {…}
  }
 
    例子中成員ICloneable.Clone 稱為接口ICloneable 的成員Clone 的實現者,因為它是顯式說明的接口成員,比其它成員有著更高的優先權。
 
    如果一個類實現了兩個或兩個以上名字、類型和參數類型都相同的接口,那么類中的一個成員就可能實現所有這些接口成員:
 
  interface IControl {
   void Paint( ) ;
  }
  interface IForm {
   void Paint( ) ;
  }
  class Page: IControl, IForm {
   public void Paint( ) {…}
  }
 
    這里,接口IControl和IForm的方法Paint都映射到了類Page中的Paint方法。當然也可以分別用顯式的接口成員分別實現這兩個方法:
 
  interface IControl {
   void Paint( ) ;
  }
  interface IForm {
   void Paint( ) ;
  }
  class Page: IControl, IForm {
   public void IControl.Paint( ) {
   //具體的接口實現代碼
  }
  public void IForm.Paint( ) {
   //具體的接口實現代碼
  }
  }
 
    上面的兩種寫法都是正確的。但是如果接口成員在繼承中覆蓋了父接口的成員,那么對該接口成員的實現就可能必須映射到顯式接口成員執行體。看下面的例子:
 
  interface IBase {
   int P { get; }
  }
  interface IDerived: IBase {
   new int P( ) ;
  }
 
    接口IDerived從接口IBase中繼承,這時接口IDerived 的成員方法覆蓋了父接口的成員方法。因為這時存在著同名的兩個接口成員,那么對這兩個接口成員的實現如果不采用顯式接口成員執行體,編譯器將無法分辨接口映射。所以,如果某個類要實現接口IDerived,在類中必須至少定義一個顯式接口成員執行體。采用下面這些寫法都是合理的:
 
  //一:對兩個接口成員都采用顯式接口成員執行體來實現
  lass C: IDerived {
   int IBase.P
   get
   { //具體的接口實現代碼 }
    int IDerived.P( ){
    //具體的接口實現代碼 }
   }
  //二:對Ibase 的接口成員采用顯式接口成員執行體來實現
  class C: IDerived {
   int IBase.P
   get {//具體的接口實現代碼}
    public int P( ){
    //具體的接口實現代碼 }
   }
  //三:對IDerived 的接口成員采用顯式接口成員執行體來實現
  class C: IDerived{
   public int P
   get {//具體的接口實現代碼}
   int IDerived.P( ){
   //具體的接口實現代碼}
  }
 
    另一種情況是,如果一個類實現了多個接口,這些接口又擁有同一個父接口,這個父接口只允許被實現一次。
 
  using System ;
  interface IControl {
   void Paint( ) ;
   interface ITextBox: IControl {
   void SetText(string text) ;
  }
  interface IListBox: IControl {
   void SetItems(string[] items) ;
  }
  class ComboBox: IControl, ITextBox, IListBox {
   void IControl.Paint( ) {…}
   void ITextBox.SetText(string text) {…}
   void IListBox.SetItems(string[] items) {…}
  }
 
    上面的例子中,類ComboBox實現了三個接口:IControl,ITextBox和IListBox。如果認為ComboBox不僅實現了IControl接口,而且在實現ITextBo

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 欧美激情性xxxxx| 青青国产精品视频| 女女女女BBBBBB毛片在线| 久久综合久久久| 欧美疯狂性受xxxxx另类| 免费观看激色视频网站bd| 草逼视频免费看| 国产成人综合日韩精品婷婷九月| 亚洲国产理论片在线播放| 门国产乱子视频观看| 国产精品久久久久久无毒不卡| 久久99热只有频精品8| 正在播放国产伦理片| 国产免费内射又粗又爽密桃视频| 在线精品91青草国产在线观看| 日本www高清| 亚洲欧美精品一中文字幕| 里番acg全彩本子同人视频 | 又粗又猛又黄又爽无遮挡| 免费福利在线观看| 女子校生下媚药在线观看| 中文字幕在线观看第二页| 日韩AV高清在线看片| 亚洲精品tv久久久久久久久| 精品久久久无码中文字幕| 国产男女性潮高清免费网站| 一级毛片视频播放| 欧日韩在线不卡视频| 免费特级黄毛片| 羞耻暴露办公室调教play视频| 国产成人免费ā片在线观看老同学| jizzjizz国产精品久久| 最新国产乱人伦偷精品免费网站| 亚洲日本欧美日韩精品| 精品欧美军人同性videos| 国产精品中文久久久久久久| 91精品国产色综合久久不卡蜜| 天堂中文字幕在线| 一个人hd高清在线观看| 成人做受120视频试看| 亚洲av永久无码精品水牛影视|