• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

C# 程序员参考--显式接口实现教程

发布: 2007-7-14 20:11 | 作者: 佚名    | 来源: 网络转载     | 查看: 12次 | 进入软件测试论坛讨论

领测软件测试网 C# 程序员参考--显式接口实现教程:

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

教程

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

示例 1

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

// explicit1.csinterface 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: 30Width: 20

代码讨论

  • 请注意 Main 方法中下列代码行被注释掉,因为它们将产生编译错误。显式实现的接口成员不能从类实例访问:
    //System.Console.WriteLine("Length: {0}", myBox.Length());//System.Console.WriteLine("Width: {0}", myBox.Width());
  • 还请注意,Main 方法中的下列代码行成功输出框的尺寸,因为这些方法是从接口实例调用的:
    System.Console.WriteLine("Length: {0}", myDimensions.Length());System.Console.WriteLine("Width: {0}", myDimensions.Width());

示例 2

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

// 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 members 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): 30Width (in): 20Length(cm): 76.2Width (cm): 50.8

代码讨论

如果希望默认度量采用英制单位,请正常实现 LengthWidth 这两个方法,并从 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());

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网