显示接口实现

实现接口的类可以显式实现该接口的成员。当显式实现某成员时,不能通过类实例访问该成员,而只能通过该接口的实例访问该成员。
显式接口实现还允许程序员继承共享相同成员名的两个接口,并为每个接口成员提供一个单独的实现。下面是关于这方面的示例:
 1//版权所有 (C) 2000 Microsoft Corporation。保留所有权利。
 2
 3// explicit2.cs
 4// 声明英制单位接口:
 5interface IEnglishDimensions 
 6{
 7   float Length();
 8   float Width();
 9}

10// 声明公制单位接口:
11interface IMetricDimensions 
12{
13   float Length();
14   float Width();
15}

16// 声明实现以下两个接口的“Box”类: 
17// IEnglishDimensions 和 IMetricDimensions:
18class Box : IEnglishDimensions, IMetricDimensions 
19{
20   float lengthInches;
21   float widthInches;
22   public Box(float length, float width) 
23   {
24      lengthInches = length;
25      widthInches = width;
26   }

27// 显式实现 IEnglishDimensions 的成员:
28   float IEnglishDimensions.Length() 
29   {
30      return lengthInches;
31   }

32   float IEnglishDimensions.Width() 
33   {
34      return widthInches;      
35   }

36// 显式实现 IMetricDimensions 的成员:
37   float IMetricDimensions.Length() 
38   {
39      return lengthInches * 2.54f;
40   }

41   float IMetricDimensions.Width() 
42   {
43      return widthInches * 2.54f;
44   }

45   public static void Main() 
46   {
47      // 声明类实例“myBox”:
48      Box myBox = new Box(30.0f20.0f);
49      // 声明英制单位接口的实例:
50      IEnglishDimensions eDimensions = (IEnglishDimensions) myBox;
51      // 声明公制单位接口的实例:
52      IMetricDimensions mDimensions = (IMetricDimensions) myBox;
53      // 以英制单位打印尺寸:
54      System.Console.WriteLine("Length(in): {0}", eDimensions.Length());
55      System.Console.WriteLine("Width (in): {0}", eDimensions.Width());
56      // 以公制单位打印尺寸:
57      System.Console.WriteLine("Length(cm): {0}", mDimensions.Length());
58      System.Console.WriteLine("Width (cm): {0}", mDimensions.Width());
59   }

60}

61
输出
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());
posted @ 2005-11-29 11:48    阅读(505)  评论(0)    收藏  举报