2009-04-08 109 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到伊巴爾和更高的特異性/多泛型感會消失