2

网上有两种关于 的陈述Interface,即
陈述 A

接口不在继承链中。

其他陈述 B

接口可以继承其他接口

这两个是矛盾的说法。

请告诉我哪一个是正确的?

4

5 回答 5

5

他们都是真的,有点。

声明 A:接口不严格继承。如果你有一个实现接口的类,你说

base.

您不会看到界面的成员。

声明 B:这将更好地理解为“接口可以实现其他接口”。你可以有一个实现链;但他们并没有真正继承。

于 2012-04-27T12:30:20.493 回答
5

接口可以继承其他接口,试一试,你会发现它是有效的。

于 2012-04-27T12:26:11.207 回答
2

两种说法都是正确的。

第二个说法是正确的。InterfaceA:InterfaceB 非常好,实现 InterfaceA 的类也必须继承 InterfaceB。

“接口不在继承链中”的意思是如果DerivedClass:BaseClass,InterfaceA,您可以使用base.BaseClassMethod从DerivedClass访问BaseClass成员,而您不能以相同的方式调用base.InterfaceAMethod,因为接口不是继承链的一部分。相反,它们的成员可以通过多态性访问。

于 2012-04-27T12:42:27.840 回答
2

They are both true, because they are both possible with C#. BUT, as we write clean code and program to an interface instead of an implementation:

Consider this,

interface IFileRepository : IDisposable { ... }

This says, whomever implements the IFileRepository, MUST implement the IDisposable. But, I can write a FileRepository, which might not need to dispose any resource. Or another example during unit-testing that I write a FileRepository-Stub for a class which uses it as dependency, but doesn't invoke Dispose() at all, at least in the method I test. And yet, I have to implement IDisposable.

Clean-design should not dictate such implementation. Concrete implementations should know what to provide.

class FileRespository : IFileRepository , IDisposable { ... }
于 2018-03-04T22:59:58.947 回答
1

在 .NET 世界中,接口绝对可以继承其他接口。任何实现类都应该实现它继承的所有接口的所有方法和属性。

如果存在命名矛盾,实现类必须使用显式接口实现

于 2012-04-27T12:27:48.397 回答