网上有两种关于 的陈述Interface
,即
陈述 A
接口不在继承链中。
其他陈述 B
这两个是矛盾的说法。
请告诉我哪一个是正确的?
他们都是真的,有点。
声明 A:接口不严格继承。如果你有一个实现接口的类,你说
base.
您不会看到界面的成员。
声明 B:这将更好地理解为“接口可以实现其他接口”。你可以有一个实现链;但他们并没有真正继承。
接口可以继承其他接口,试一试,你会发现它是有效的。
两种说法都是正确的。
第二个说法是正确的。InterfaceA:InterfaceB 非常好,实现 InterfaceA 的类也必须继承 InterfaceB。
“接口不在继承链中”的意思是如果DerivedClass:BaseClass,InterfaceA,您可以使用base.BaseClassMethod从DerivedClass访问BaseClass成员,而您不能以相同的方式调用base.InterfaceAMethod,因为接口不是继承链的一部分。相反,它们的成员可以通过多态性访问。
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 { ... }
在 .NET 世界中,接口绝对可以继承其他接口。任何实现类都应该实现它继承的所有接口的所有方法和属性。
如果存在命名矛盾,实现类必须使用显式接口实现。