2009-10-26 95 views
0

我是C#的新手。我想知道使用集合的區別。我懷疑,以下問題可能會在以前提出(如果這麼友好地告訴我鏈接)。通過接口暴露集合

什麼是

IList<int> intCollection = new List<int>(); 

List<int> intCollection = new List<int>(); 
  1. 之間的區別我爲什麼要通過接口公開我的收藏。
  2. 選擇第一種方法只是合成糖嗎?
  3. 如果我想用後面的方法,我會面臨什麼樣的缺點?
  4. 如果相應接口退出,應該使用它們相應的接口間接初始化所有集合類 ?
  5. 請向我展示通過接口公開集合的例子中的好處。

回答

5

使用接口可以在不中斷任何呼叫者的情況下更改支持實現。

您示例中的兩行代表的內容相同,但如果您將IList<T>作爲屬性公開,您可以更改返回的內容而無需調用需要更改的代碼。

假設您有一個類將List<int>作爲屬性公開。一切都很好,直到後來當你意識到你需要處理一個項目被添加到這個列表時引發的事件。你不能;你將不得不改變屬性類型,因此所有的代碼都會調用它。如果您最初聲明IList<int>,則可以繼續並將具體實現更改爲不同(只要它仍支持該接口)。

這是StyleCop拾取並在this question中處理的東西。

+0

這裏可以想到的一個例子是交換另一個實現'IList'的集合庫的能力,比如C5。 –

2

使用接口的好處是它可以讓您靈活地適應未來的變化。在您的示例中,使用IList將允許您將來使用IList的不同實現,並且只需更改對象初始值設定項。

另一種情況是,您的代碼可能需要與許多不同類型的相同接口進行交互,或者實現完全未知。例如,您需要使用不同排序算法的策略模式,並且您希望根據您的排序需求使用IList的不同實現。或者您可能正在使用插件模型,並且不知道另一個組件將傳遞到您的api中的列表是什麼類型的,但您所關心的只是它是遵循IList合同的ILIST。