C# 重新实现另一个接口已继承的接口
我经常看到这样的东西:C# 重新实现另一个接口已继承的接口,c#,.net,interface,language-design,C#,.net,Interface,Language Design,我经常看到这样的东西: interface A { ... } interface B : A { ... } class C : B, A { ...} 为什么要指定C实现接口A,而B已经继承了A? 它有语义上的区别吗?还是只是风格的问题 (许多示例之一是List实现IList和ICollection,而IList也源于ICollection) 更新:感谢您确认我的猜测,它没有任何语义差异 我提出了一种相关的情况,在这种情况下,显式命名已存在于继承树中的接口确实会有所不同: 如果B是一个类
interface A { ... }
interface B : A { ... }
class C : B, A { ...}
为什么要指定C实现接口A,而B已经继承了A?
它有语义上的区别吗?还是只是风格的问题
(许多示例之一是List
实现IList
和ICollection
,而IList
也源于ICollection
)
更新:感谢您确认我的猜测,它没有任何语义差异 我提出了一种相关的情况,在这种情况下,显式命名已存在于继承树中的接口确实会有所不同: 如果
B
是一个类,C
只会(重新)实现a
中的接口成员,如果它在“:
后面显式地命名a
”
[编辑]我更改了问题的措辞,以避免与明确实现的接口成员混淆,这将成员的使用限制在对象被强制转换为接口的情况下。我认为这只是风格问题。在查看框架/库类时,这一点特别重要——例如,在您的示例中,它强调了这样一个想法,即该类可以被视为ICollection或IList,而开发人员不必知道IList实际上是ICollection 它没有功能上的分支。具体地说,无论是否 类“C”显式实现了“A”:
namespace DotNetInterfaceTest {
class Program {
static void Main(string[] args) {
A c = new C();
}
}
interface A {
void foo();
}
interface B : A {
void bar();
}
class C : B {
public void bar() {}
public void foo() {}
}
}
我认为这是为了更好的可读性。。不必让你的脑细胞穿过界面继承层次结构。