我经常看到这样的内容:
interface A { ... }
interface B : A { ... }
class C : B, A { ...}
为什么要指定C实现接口A,当B已经继承了A呢?这是否有语义上的区别,还是只是风格问题?
(许多例子之一是List 实现 IList 和 ICollection ,而 IList 也派生自 ICollection 。)
更新:感谢确认我的猜想,它并没有产生任何语义上的区别。
我想到了一个相关的情况,其中明确命名已经在继承树中的接口会有所不同:
如果B是一个类,则只有在“:”后显式命名A时,C才会重新实现来自A的接口成员。
[编辑]我更改了问题的措辞,以避免与显式实现的接口成员混淆,这限制了将对象强制转换为接口的情况下使用成员的方式。