C#接口编程:重实现接口详解

需积分: 3 1 下载量 175 浏览量 更新于2024-09-16 收藏 46KB DOC 举报
"全面剖析C#接口编程教程4——之实现接口(2)" 在C#编程中,接口(Interface)是一种定义行为规范的类型,它只包含方法、属性、索引器和事件的签名,不包含任何实现。接口是多继承的替代方案,允许类或者结构体实现多个接口,从而实现多重行为。本教程将深入探讨接口的实现,特别是接口的重实现(re-implementation)。 首先,接口的重实现是指派生类在继承已经实现了接口的基类后,可以再次对接口进行实现。这种情况下,派生类必须在基类列表中明确指定接口,并且重实现的规则与首次实现接口相同,即需要遵循命名约定,使用显式接口成员实现(explicit interface member implementation)。这意味着在派生类中,接口方法的实现与基类中实现的接口方法是分离的,不会互相覆盖。 例如: ```csharp interface IControl { void Paint(); } class Control : IControl { void IControl.Paint() { ... } } class MyControl : Control, IControl { public void Paint() { ... } // 重实现接口方法 } ``` 在这个例子中,`Control` 类实现了 `IControl` 接口,将 `IControl.Paint` 映射到 `Control.IControl.Paint`。而 `MyControl` 在继承 `Control` 同时再次实现 `IControl`,将 `IControl.Paint` 映射到 `MyControl.Paint`,实现了接口的重实现。 在接口的重实现过程中,继承而来的公共成员定义和显式接口成员的定义都会参与到接口映射。这意味着派生类不仅可以重写基类的公共方法,也可以重写基类中显式实现的接口方法。以下示例展示了这一情况: ```csharp interface IMethods { void F(); void G(); void H(); void I(); } class Base : IMethods { void IMethods.F() { ... } void IMethods.G() { ... } public void H() { ... } public void I() { ... } } class Derived : Base, IMethods { public void F() { ... } // 重实现接口方法 void IMethods.H() { ... } // 重实现接口方法 } ``` 在这个例子中,`Derived` 类继承了 `Base` 并再次实现了 `IMethods` 接口。它重写了 `IMethods.F` 和 `IMethods.H` 方法。接口 `IMethods` 在 `Derived` 类中的实现映射为 `Derived.F`, `Base.IMethods.G`, `Derived.IMethods.H` 和 `Base.I`。 接口的重实现提供了灵活性,允许在不同层次的继承结构中调整和扩展类的行为。这种机制在设计大型系统或构建模块化代码时尤其有用,因为它可以确保类遵循特定的接口契约,即使这些类是从已实现了相同接口的类继承而来。同时,显式接口成员实现保持了类内部实现的封装性,使得接口使用者只能通过接口调用方法,而不是直接访问类的内部实现细节。