How to: Explicitly Implement Interface Members with Inheritance (C# Programming Guide)
2010-08-28 17:15
507 查看
显式接口实现还允许程序员实现具有相同成员名称的两个接口,并为每个接口成员各提供一个实现。本示例同时以公制单位和英制单位显示框的尺寸。Box 类实现 IEnglishDimensions 和 IMetricDimensions 两个接口,它们表示不同的度量系统。两个接口有相同的成员名称 Length 和 Width。
可靠编程
如果希望默认度量采用英制单位,请正常实现 Length 和 Width 这两个方法,并从 IMetricDimensions 接口显式实现 Length 和 Width 方法:
这种情况下,可以从类实例访问英制单位,而从接口实例访问公制单位:
// 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; } static void Main() { // Declare a class instance box1: Box box1 = new Box(30.0f, 20.0f); // Declare an instance of the English units interface: IEnglishDimensions eDimensions = (IEnglishDimensions)box1; // Declare an instance of the metric units interface: IMetricDimensions mDimensions = (IMetricDimensions)box1; // 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()); } } /* Output: 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; }
这种情况下,可以从类实例访问英制单位,而从接口实例访问公制单位:
public static void Test() { Box box1 = new Box(30.0f, 20.0f); IMetricDimensions mDimensions = (IMetricDimensions)box1; System.Console.WriteLine("Length(in): {0}", box1.Length()); System.Console.WriteLine("Width (in): {0}", box1.Width()); System.Console.WriteLine("Length(cm): {0}", mDimensions.Length()); System.Console.WriteLine("Width (cm): {0}", mDimensions.Width()); }
相关文章推荐
- How to: Explicitly Implement Interface Members with Inheritance (C# Programming Guide)
- How to: Explicitly Implement Interface Members with Inheritance (C# Programming Guide)
- How to: Explicitly Implement Interface Members with Inheritance (C# Programming Guide)
- How to: Explicitly Implement Interface Members with Inheritance (C# Programming Guide)
- How to: Implement Interface Events (C# Programming Guide)
- How to: Explicitly Implement Interface Members (C# Programming Guide)
- Explicit Interface Implementation (C# Programming Guide)
- Versioning with the Override and New Keywords (C# Programming Guide)
- How to: Use a Thread Pool (C# Programming Guide)
- Windows Forms Programming with C#
- Explicitly Release Resources In C#
- Test-Driven C# Improve the Design and Flexibility of Your Project with Extreme Programming Techniques
- C#的多线程——使用async和await来完成异步编程(Asynchronous Programming with async and await)
- Differences Between C++ Templates and C# Generics (C# Programming Guide)
- Partial Classes and Methods (C# Programming Guide)
- Generic Interfaces (C# Programming Guide)
- In-App Purchase Programming Guide----(六) ----Working with Subscriptions
- HOW TO: Implement a DataSet SELECT DISTINCT Helper Class in Visual C# .NET
- Cannot call method in class, which is explicitly implemented from interface, through new object
- Interface Properties (C# Programming Guide)