我经常看到这样的东西:
interface A { ... }
interface B : A { ... }
class C : B, A { ...}
当 B 已经继承 A 时,为什么要指定 C 实现接口 A?它会产生任何语义差异还是只是风格问题?
(许多示例之一是List<T>
实现IList<T>
and ICollection<T>
,同时IList<T>
也派生自ICollection<T>
)。
更新:感谢您确认我的猜测,它不会产生任何语义差异。
我想出了一个相关的情况,显式命名已经在继承树中的接口确实会有所不同:
如果B
是一个类,则C
只会(重新)实现接口成员,A
如果它A
在“”之后显式命名:
。
[编辑] 我更改了问题的措辞以避免与显式实现的接口成员混淆,这将成员的使用限制在对象被转换为接口的情况下。