gpt4 book ai didi

c# - 重新实现另一个接口(interface)已经继承的接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 21:11:36 25 4
gpt4 key购买 nike

我经常看到这样的东西:

interface A { ... }
interface B : A { ... }
class C : B, A { ...}

当 B 已经继承了 A 时,为什么要指定 C 实现接口(interface) A?它会产生任何语义上的差异还是仅仅是风格问题?

(其中一个例子是 List<T> 实现了 IList<T>ICollection<T>,而 IList<T> 也派生自 ICollection<T>)。


更新:感谢您证实我的猜测,即它不会产生任何语义差异。

我想到了一个相关的情况,它确实显式地命名一个已经在继承树中的接口(interface)会有所不同:

如果B是一个类(class),C只会(重新)实现来自 A 的接口(interface)成员如果它命名为 A明确在 ': 之后'.

[编辑] 我更改了问题的措辞以避免与显式实现的接口(interface)成员混淆,这将成员的使用限制在对象被转换为接口(interface)的情况下。

最佳答案

我相信这只是风格问题。在查看框架/库类时,这一点特别重要 - 例如,在您的示例中,它强调了此类可以被视为 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() {}
}
}

关于c# - 重新实现另一个接口(interface)已经继承的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/255951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com