【发布时间】:2008-11-01 18:50:06
【问题描述】:
我经常看到这样的东西:
interface A { ... }
interface B : A { ... }
class C : B, A { ...}
当 B 已经继承 A 时,为什么要指定 C 实现接口 A? 它会产生任何语义差异还是只是风格问题?
(许多示例之一是 List<T> 实现 IList<T> 和 ICollection<T>,而 IList<T> 也派生自 ICollection<T>)。
更新:感谢您确认我的猜测,它不会产生任何语义差异。
我想出了一个相关的情况,它确实显式地命名一个已经在继承树中的接口:
如果B 是一个类,则C 只会(重新)实现来自A 的接口成员,前提是它在“A”之后显式命名A。
[编辑] 我更改了问题的措辞以避免与显式实现的接口成员混淆,这将成员的使用限制在对象被转换为接口的情况下。
【问题讨论】:
标签: c# .net interface language-design