基于C#的接口基礎教程之五(3)
2007/1/9 20:55:35
2、繼承接口實現
 
    接口具有不變性,但這并不意味著接口不再發展。類似于類的繼承性,接口也可以繼承和發展。
 
    注意:接口繼承和類繼承不同,首先,類繼承不僅是說明繼承,而且也是實現繼承;而接口繼承只是說明繼承。也就是說,派生類可以繼承基類的方法實現,而派生的接口只繼承了父接口的成員方法說明,而沒有繼承父接口的實現,其次,C#中類繼承只允許單繼承,但是接口繼承允許多繼承,一個子接口可以有多個父接口。
 
    接口可以從零或多個接口中繼承。從多個接口中繼承時,用":"后跟被繼承的接口名字,多個接口名之間用","分割。被繼承的接口應該是可以訪問得到的,比如從private 類型或internal 類型的接口中繼承就是不允許的。接口不允許直接或間接地從自身繼承。和類的繼承相似,接口的繼承也形成接口之間的層次結構。
 
    請看下面的例子:
 
  using System ;
  interface IControl {
  void Paint( ) ;
  }
  interface ITextBox: IControl {
  void SetText(string text) ;
  }
  interface IListBox: IControl {
  void SetItems(string[] items) ;
  }
  interface IComboBox: ITextBox, IListBox { }
 
    對一個接口的繼承也就繼承了接口的所有成員,上面的例子中接口ITextBox和IListBox都從接口IControl中繼承,也就繼承了接口IControl的Paint方法。接口IComboBox從接口ITextBox和IListBox中繼承,因此它應該繼承了接口ITextBox的SetText方法和IListBox的SetItems方法,還有IControl的Paint方法。
  一個類繼承了所有被它的基本類提供的接口實現程序。
 
    不通過顯式的實現一個接口,一個派生類不能用任何方法改變它從它的基本類繼承的接口映射。例如,在聲明中
 
  interface IControl {
  void Paint( );
  }
  class Control: IControl {
  public void Paint( ) {...}
  }
  class TextBox: Control {
  new public void Paint( ) {...}
  }
 
    TextBox 中的方法Paint 隱藏了Control中的方法Paint ,但是沒有改變從Control.Paint 到IControl.Paint 的映射,而通過類實例和接口實例調用Paint將會有下面的影響
 
  Control c = new Control( ) ;
  TextBox t = new TextBox( ) ;
  IControl ic = c ;
  IControl it = t ;
  c.Paint( ) ; // 影響Control.Paint( ) ;
  t.Paint( ) ; // 影響TextBox.Paint( ) ;
  ic.Paint( ) ; // 影響Control.Paint( ) ;
  it.Paint( ) ; // 影響Control.Paint( ) ;
 
    但是,當一個接口方法被映射到一個類中的虛擬方法,派生類就不可能覆蓋這個虛擬方法并且改變接口的實現函數。例如,把上面的聲明重新寫為
 
  interface IControl {
  void Paint( ) ;
  }
  class Control: IControl {
  public virtual void Paint( ) {...}
  }
  class TextBox: Control {
  public override void Paint( ) {...}
  }
 
    就會看到下面的結果:
 
  Control c = new Control( ) ;
  TextBox t = new TextBox( ) ;
  IControl ic = c ;
  IControl it = t ;
  c.Paint( ) ; // 影響Control.Paint( );
  t.Paint( ) ; // 影響TextBox.Paint( );
  ic.Paint( ) ; // 影響Control.Paint( );
  it.Paint( ) ; // 影響TextBox.Paint( );
 
    由于顯式接口成員實現程序不能被聲明為虛擬的,就不可能覆蓋一個顯式接口成員實現程序。一個顯式接口成員實現程序調用另外一個方法是有效的,而另外的那個方法可以被聲明為虛擬的以便讓派生類可以覆蓋它。例如:
 
  interface IControl {
   void Paint( ) ;
  }
  class Control: IControl {
 

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 日韩系列第一页| 美女扒开尿口让男人捅爽| 欧美日韩国产另类在线观看| 午夜精品一区二区三区在线视| 黄色小视频app下载| 国产精品自在在线午夜出白浆| wwwjizzz| 成人看的午夜免费毛片| 久久大香伊蕉在人线观看热2| 欧美地区一二三区| 亚洲精品成人片在线播放| 精品一区二区三区四区在线| 国产aaa毛片| 香蕉高清免费永久在线视频| 国产激情一区二区三区四区| 84pao强力打造| 在线看免费毛片| sao货水真多好浪好紧视频| 果冻传媒电影在线| 免费在线你懂的| 美女黄18以下禁止观看| 国产产一区二区三区久久毛片国语| 欧美18性精品| 国产精品久久久久久久久电影网 | 日韩欧美亚洲天堂| 免费av一区二区三区| 国产免费插插插| 国产精品久久香蕉免费播放| 91香蕉视频黄色| 在线观看视频日韩| lisaannxxxxx| 好男人观看免费视频播放全集| 中国猛少妇色XXXXX| 无码人妻久久一区二区三区免费 | 国产成人综合美国十次| wwwxxx国产| 国产精品怡红院在线观看| 91精品久久久久久久久网影视| 在线观看免费成人| a级黄色毛片三| 天天躁日日躁狠狠躁性色AVQ |