2009-04-08 107 views
0

我有一个叫做Foo的对象。现在它实现了IFoo,它有很多属性。接口问题

我有一个类,只有这样我创建IMeasurableFoo(这只是有几个属性)

,以避免重复的代码依赖于少数的特性,我现在的IFoo:IMeasurableFoo我感动的属性变成IMeasurableFoo

但你有一个更一般的接口,一个特定的接口

在组织这些抽象的最佳途径的任何想法继承这种感觉从一个角度遗产点错

例如,如果这些是结核:

鸟不会从FlyingBird继承(这将是周围的其他方式)

回答

5

不,这不是“更通用的接口从特定的接口继承”。 IMeasurableFoo,只有几个属性,通用接口,而IFoo更具体,因为它提高了关于IMeasurableFoo的知识。认为IList继承自IEnumerable

+0

我说这是鸟不会从FlyingBird继承的原因吗?这将是另一种方式 – leora 2009-04-08 12:43:35

1

请勿将接口继承用于避免重复代码的唯一目的。如果两个接口之间没有关系,则不需要实现继承。

如果Foo不是MeasurableFoo,则不需要继承。

1

不,我不认为它有什么问题。可能它只是名称IMeasurableFoo这是误导,因为它只是可测量的,它不是一个完整的Foo

4

也许更改名称? IMeasurableFoo的确听起来像一个更具体的接口,但是你不能只称它为IFoo并重命名原始的IFoo接口吗?或者重新命名?

IMeasurableFoo真的是IFoo还是(或许)IMeasurable?

+0

然后IMeasurable将类似于IDisposable,+1 – 2009-04-08 12:47:23

0

我不认为IMeasurableFoo不那么通用。由于IFoo包含IMeasurableFoo,因此我认为IMeasurebleFoo更通用。

真的感觉你有IBaseInterface和IExtendedInterface:IBaseInterface。

换句话说,我认为你有正确的做法。

编辑:与你的例子IBird和IFlyingBird,你只是有一个命名问题。它应该是:

public interface IFlyer 
{ 
    void Fly(); 
} 

public interface IBird : IFlyer 
{ 
    void Chirp(); 
} 
0

在这种情况下,我认为事物的命名是问题而不是事物本身。换句话说,具有较少成员的接口往往比拥有更多成员的接口更抽象。

0

这里有什么奇怪的?接口继承增加了每个继承级别的方法和属性的数量。

重命名IMeasurableFoo到伊巴尔和更高的特异性/多泛型感会消失