我有一个名为Foo的对象。现在它实现了IFoo,它有很多属性。
我有一个类只依赖于其中的一些属性所以我创建了IMeasurableFoo(它只有一些属性)
为避免重复代码,我现在有了IFoo:IMeasurableFoo,因为我将属性移动到IMeasurableFoo
但是从继承的角度来看这是错误的,因为你有一个从特定接口继承的更通用的接口
关于组织这些抽象的最佳方式的任何想法
例如,如果这些是具体结果:
Bird不会继承FlyingBird(反过来也是如此)
答案 0 :(得分:5)
不,它不是“从特定接口继承的更通用的接口”。只有几个属性的IMeasurableFoo
是 泛型接口,而IFoo
更具体,因为它改进了有关IMeasurableFoo
的知识。认为IList
继承自IEnumerable
。
答案 1 :(得分:4)
也许更改名字? IMeasurableFoo听起来确实是一个更具体的界面,但你不能只称它为IFoo并重命名原始的IFoo界面吗?或者重命名两个?
IMeasurableFoo真的是一个IFoo或(可能)是一个无法忍受的吗?
答案 2 :(得分:1)
不要将接口继承用于避免重复代码的唯一目的。如果两个接口之间没有关系,则它们不需要实现继承。
如果Foo不是MeasurableFoo,则没有继承需求。
答案 3 :(得分:1)
不,我不认为它有什么问题。可能只是IMeasurableFoo
的名称具有误导性,因为它只是可衡量的而且不是完整的Foo
。
答案 4 :(得分:0)
我不认为IMeasurableFoo不那么通用。由于IFoo包含IMeasurableFoo,我认为IMeasurebleFoo更通用。
感觉就像你有IBaseInterface和IExtendedInterface:IBaseInterface。
换句话说,我认为你有正确的方法。
编辑:使用您的示例IBird和IFlyingBird,您只是有一个命名问题。它应该是:
public interface IFlyer
{
void Fly();
}
public interface IBird : IFlyer
{
void Chirp();
}
答案 5 :(得分:0)
在这种情况下,我认为事物的命名是问题而不是事物本身。换句话说,具有较少成员的接口往往比具有更多成员的接口更抽象。
答案 6 :(得分:0)
这里有什么奇怪的?接口继承增加了每个继承级别的方法和属性的数量。
将IMeasurableFoo重命名为IBar,更具特异性/更通用性的感觉将消失