基于C#的接口基礎教程之五(2)
2007/1/9 20:54:15
使用顯式接口成員執行體通常有兩個目的:
 
    1、因為顯式接口成員執行體不能通過類的實例進行訪問,這就可以從公有接口中把接口的實現部分單獨分離開。如果一個類只在內部使用該接口,而類的使用者不會直接使用到該接口,這種顯式接口成員執行體就可以起到作用。
 
    2、顯式接口成員執行體避免了接口成員之間因為同名而發生混淆。如果一個類希望對名稱和返回類型相同的接口成員采用不同的實現方式,這就必須要使用到顯式接口成員執行體。如果沒有顯式接口成員執行體,那么對于名稱和返回類型不同的接口成員,類也無法進行實現。
 
    下面的定義是無效的,因為Shape 定義時基類列表中沒有出現接口IComparable。
 
  class Shape: ICloneable
  {
  object ICloneable.Clone( ) {…}
  }
  class Ellipse: Shape
  {
  object ICloneable.Clone( ) {…}
  }
 
    在Ellipse 中定義ICloneable.Clone是錯誤的,因為Ellipse即使隱式地實現了接口ICloneable,ICloneable仍然沒有顯式地出現在Ellipse定義的基類列表中。
 
    接口成員的全權名必須對應在接口中定義的成員。如下面的例子中,Paint的顯式接口成員執行體必須寫成IControl.Paint。
 
  using System ;
  interface IControl
  {
   void Paint( ) ;
  }
  interface ITextBox: IControl
  {
   void SetText(string text) ;
  }
  class TextBox: ITextBox
  {
   void IControl.Paint( ) {…}
   void ITextBox.SetText(string text) {…}
  }
 
 
    實現接口的類可以顯式實現該接口的成員。當顯式實現某成員時,不能通過類實例訪問該成員,而只能通過該接口的實例訪問該成員。顯式接口實現還允許程序員繼承共享相同成員名的兩個接口,并為每個接口成員提供一個單獨的實現。
 
    下面例子中同時以公制單位和英制單位顯示框的尺寸。Box類繼承 IEnglishDimensions和 IMetricDimensions兩個接口,它們表示不同的度量衡系統。兩個接口有相同的成員名 Length 和 Width。
 
    程序清單1 DemonInterface.cs
 
  interface IEnglishDimensions {
  float Length ( ) ;
  float Width ( ) ;
  }
  interface IMetricDimensions {
  float Length ( ) ;
  float Width ( ) ;
  }
  class Box : IEnglishDimensions, IMetricDimensions {
  float lengthInches ;
  float widthInches ;
  public Box(float length, float width) {
  lengthInches = length ;
  widthInches = width ;
  }
  float IEnglishDimensions.Length( ) {
  return lengthInches ;
  }
  float IEnglishDimensions.Width( ) {
  return widthInches ;
  }
  float IMetricDimensions.Length( ) {
  return lengthInches * 2.54f ;
  }
  float IMetricDimensions.Width( ) {
  return widthInches * 2.54f ;
  }
  public static void Main( ) {
  //定義一個實類對象 "myBox"::
  Box myBox = new Box(30.0f, 20.0f);
  // 定義一個接口" eDimensions"::
  IEnglishDimensions eDimensions = (IEnglishDimensions) myBox;
  IMetricDimensions mDimensions = (IMetricDimensions) myBox;
  // 輸出:
  System.Console.WriteLine(" Length(in): {0}", eDimensions.Length( ));
  System.Console.WriteLine(" Width (in): {0}", eDimensions.Width( ));
  System.Console.WriteLine(" Length(cm): {0}", mDimensions.Length( ));
  System.Console.WriteLine(" Width (cm): {0}", mDimensions.Width( ));
  }
  }
 
    輸出:Length(in): 30,Width (in): 20,

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 欧美亚洲国产精品久久高清| 亚洲精品蜜桃久久久久久| 便器调教(肉体狂乱)小说| 亚洲伊人久久大香线蕉影院| 中文字幕在线观看2020| 91精品国产色综合久久不卡蜜| 鲁啊鲁啊鲁在线视频播放| 精品一区二区三区东京热| 欧美中文字幕在线视频| 性高湖久久久久久久久| 国产精品成人免费福利| 国产91热爆ts人妖在线| 亚洲国产成人精品电影| 三级网站免费观看| 欧美色图第三页| 狠狠躁夜夜躁av网站中文字幕| 日韩欧美高清视频| 在线观看星空传媒入口| 国产一区二区精品在线观看| 亚洲女初尝黑人巨高清| 一本大道久久东京热无码AV| 久久香蕉国产线看精品| 男人桶女人爽羞羞漫画| 日本一区二区高清| 国产精品人人做人人爽人人添 | 人人妻人人狠人人爽| 丰满少妇大力进入| 中文乱码字幕午夜无线观看| 疯狂吃奶freesex| 日产乱码卡1卡2卡三卡四在线| 国产精品美女久久久免费| 午夜无码人妻av大片色欲| 久久精品久久久久观看99水蜜桃| 999任你躁在线精品免费不卡| 美女被扒开胸罩| 日韩人妻无码精品无码中文字幕| 国内精品久久久久国产盗摄| 北条麻妃毛片在线视频| 久久久亚洲欧洲日产国码aⅴ | 黑人啊灬啊灬啊灬快灬深| 欧美日韩国产在线播放|