当前位置:首页 > 全部子站 > 备课网 > 学院

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

来源:长理培训发布时间:2017-08-20 20:22:40

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

教程

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

示例 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

代码讨论

  • 请注意 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 类继承 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] 

责编:杨粟梅

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部