电话:0731-83595998
导航

C# 程序员参考--显式接口完成教学文章

来源: 2017-08-20 20:22

 本教程演示如何显式实现接口成员以及如何从接口实例访问这些成员。

教程

实现接口的类可以显式实现该接口的成员。当显式实现某成员时,不能通过类实例访问该成员,而只能通过该接口的实例访问该成员。本教程包含两个示例。第一个示例阐释如何显式实现和访问接口成员。第二个示例展示如何实现具有相同成员名的两个接口。

示例 1

本示例声明一个 IDimensions 接口和一个 Box 类,该类显式实现接口成员 Length 和Width。通过接口实例 myDimensions 访问这些成员。

// explicit1.cs



interface IDimensions 



{



   float Length();



   float Width();



}







class Box : IDimensions 



{



   float lengthInches;



   float widthInches;







   public Box(float length, float width) 



   {



      lengthInches = length;



      widthInches = width;



   }



   // Explicit interface member implementation: 



   float IDimensions.Length() 



   {



      return lengthInches;



   }



   // Explicit interface member implementation:



   float IDimensions.Width() 



   {



      return widthInches;      



   }







   public static void Main() 



   {



      // Declare a class instance "myBox":



      Box myBox = new Box(30.0f, 20.0f);



      // Declare an interface instance "myDimensions":



      IDimensions myDimensions = (IDimensions) myBox;



      // Print out the dimensions of the box:



      /* The following commented lines would produce compilation 



         errors because they try to access an explicitly implemented



         interface member from a class instance:                   */



      //System.Console.WriteLine("Length: {0}", myBox.Length());



      //System.Console.WriteLine("Width: {0}", myBox.Width());



      /* Print out the dimensions of the box by calling the methods 



         from an instance of the interface:                         */



      System.Console.WriteLine("Length: {0}", myDimensions.Length());



      System.Console.WriteLine("Width: {0}", myDimensions.Width());



   }



}

输出

Length: 30



Width: 20

代码讨论

示例 2

显式接口实现还允许程序员继承共享相同成员名的两个接口,并为每个接口成员提供一个单独的实现。本示例同时以公制单位和英制单位显示框的尺寸。Box 类继承 IEnglishDimensions 和IMetricDimensions 两个接口,它们表示不同的度量衡系统。两个接口有相同的成员名 Length和 Width

// explicit2.cs



// Declare the English units interface:



interface IEnglishDimensions 



{



   float Length();



   float Width();



}



// Declare the metric units interface:



interface IMetricDimensions 



{



   float Length();



   float Width();



}



// Declare the "Box" class that implements the two interfaces:



// IEnglishDimensions and IMetricDimensions:



class Box : IEnglishDimensions, IMetricDimensions 



{



   float lengthInches;



   float widthInches;



   public Box(float length, float width) 



   {



      lengthInches = length;



      widthInches = width;



   }



// Explicitly implement the members of IEnglishDimensions:



   float IEnglishDimensions.Length() 



   {



      return lengthInches;



   }



   float IEnglishDimensions.Width() 



   {



      return widthInches;      



   }



// Explicitly implement the me

 

[1] [2] 下一页  

 

mbers of IMetricDimensions: float IMetricDimensions.Length() { return lengthInches * 2.54f; } float IMetricDimensions.Width() { return widthInches * 2.54f; } public static void Main() { // Declare a class instance "myBox": Box myBox = new Box(30.0f, 20.0f); // Declare an instance of the English units interface: IEnglishDimensions eDimensions = (IEnglishDimensions) myBox; // Declare an instance of the metric units interface: IMetricDimensions mDimensions = (IMetricDimensions) myBox; // Print dimensions in English units: System.Console.WriteLine("Length(in): {0}", eDimensions.Length()); System.Console.WriteLine("Width (in): {0}", eDimensions.Width()); // Print dimensions in metric units: System.Console.WriteLine("Length(cm): {0}", mDimensions.Length()); System.Console.WriteLine("Width (cm): {0}", mDimensions.Width()); } }

输出

Length(in): 30



Width (in): 20



Length(cm): 76.2



Width (cm): 50.8

代码讨论

如果希望默认度量采用英制单位,请正常实现 Length 和 Width 这两个方法,并从 IMetricDimensions 接口显式实现 Length 和 Width 方法:

// Normal implementation:



public float Length()



{



   return lengthInches;



}



public float Width()



{



   return widthInches;



}



// Explicit implementation:



float IMetricDimensions.Length() 



{



   return lengthInches * 2.54f;



}



float IMetricDimensions.Width() 



{



   return widthInches * 2.54f;



}

这种情况下,可以从类实例访问英制单位,而从接口实例访问公制单位:

System.Console.WriteLine("Length(in): {0}", myBox.Length());



System.Console.WriteLine("Width (in): {0}", myBox.Width());   



System.Console.WriteLine("Length(cm): {0}", mDimensions.Length());



System.Console.WriteLine("Width (cm): {0}", mDimensions.Width());

 

 

 

上一页  [1] [2] 

编辑推荐:

下载Word文档

温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)

网络课程 新人注册送三重礼

已有 22658 名学员学习以下课程通过考试

网友评论(共0条评论)

请自觉遵守互联网相关政策法规,评论内容只代表网友观点!

最新评论

点击加载更多评论>>

精品课程

更多
10781人学习

免费试听更多

相关推荐
图书更多+
  • 电网书籍
  • 财会书籍
  • 其它工学书籍
拼团课程更多+
  • 电气拼团课程
  • 财会拼团课程
  • 其它工学拼团
热门排行

长理培训客户端 资讯,试题,视频一手掌握

去 App Store 免费下载 iOS 客户端