2012-08-08 46 views
3

我有一個接口和一個類來實現它。現在我想保留這個類的一些東西的集合。 Sholud我在接口部分使用ICollection的並在沈志南部分使用收藏我們是否應該在類中的接口和集合<T>中使用ICollection <T>?

在這兩個部分中使用ICollection是否是更好的做法和更靈活的方法?

另外:我說過的「事情」我想保留它們在我的課程中的集合,它們也是我擁有的其他類的對象,這些類又有它們自己的接口。那麼什麼是最好的實踐?如果我想將它們保存到集合中,我甚至應該使用這些類型的接口類型嗎?

+1

我將它初始化爲'ICollection bar = new List (); ......然後從那裏(課堂內外)使用「ICollection 」。希望我能正確理解這個問題。請注意,「ICollection 」可能對您的需求太過原始,因此IList 會更好。這是我最終做了一次 - 從'ICollection'切換到'IList',因爲我需要這個命令而不是像一個普通的一樣使用某些東西。 – Leonid 2012-08-08 02:18:27

+0

是的,你理解正確..只是我的問題的第二部分:你推薦ICollection 或使用ICollection ... Foo類的接口 – DarkNightFan 2012-08-08 02:20:48

+1

儘量保持實用。如果你打算改變實現'IFoo'的行爲並替換一個不同的東西,那麼是的,你確實需要一個'IFoo'(我希望C#足夠聰明以識別等價性;我沒有嘗試過) 。如果你不需要改變'Foo'的實現,那麼創建一個'IFoo'可能沒有什麼好的理由。使用'ICollection '更有意義 - 您希望能夠使用不同的數據結構,比如說突然需要更好的性能。你可以用替代名稱代替dell,並且仍然很好 – Leonid 2012-08-08 02:26:03

回答

2

如果你可以暴露一個接口而不是一個類,那麼暴露接口;例如,只有在必須這樣做的情況下才公開該類,以暴露接口上不可用的方法。你應該在你的界面和你的課堂上做到這一點。

理由是,信息隱藏是一個「好東西」,所以如果你能做到而不失一般性,你應該這樣做。

+0

謝謝,所以在@Lenoids的例子中,你推薦ICollection 還是你推薦ICollection ?(Foo的界面) – DarkNightFan 2012-08-08 02:24:17

+2

暴露界面給你增加了在不同的實現或模擬中交換的選項 – Berryl 2012-08-08 02:25:26

+1

@DarkNightFan我不認爲有可能將'List '分配給'IList '([link](http: //ideone.com/HxH2d)到編譯錯誤的ideone),所以你需要使用'IList '。 – dasblinkenlight 2012-08-08 02:33:48

相關問題