想改善這個問題嗎? 更新問題,以便經過編輯此帖子以事實和引用的形式回答。 html
昨天關閉。 程序員
誰能向我解釋爲何我要在C#中使用IList over List? 面試
相關問題: 爲何公開List<T>
被認爲是很差的 數組
我會稍微解決這個問題,而不是說明爲何要在具體實現上使用接口,而是要說明爲何要使用具體實現而不是接口。 若是您沒法證實其合理性,請使用該界面。 安全
較不受歡迎的答案是程序員喜歡僞裝他們的軟件將在世界範圍內重複使用,實際上,大多數項目將由少許人員維護,可是不管界面相關的聲音如何,您都在欺騙你本身 框架
建築宇航員 。 您編寫本身的IList並將任何內容添加到.NET框架中已添加的內容的機會很是渺茫,以致於理論上的果凍只能用於「最佳實踐」。 編碼
顯然,若是詢問您在面試中使用哪個,您會說出IList,微笑,而且都對本身如此聰明而感到滿意。 或面向公衆的API,即IList。 但願你明白個人意思。 spa
上面的大多數答案中基本上都說明了全部概念,有關爲何要在具體實現中使用接口。 code
IList<T> defines those methods (not including extension methods)
IList<T>
MSDN連接 htm
List<T>
實現了這九種方法(不包括擴展方法),最重要的是它具備約41種公共方法,這權衡了您在應用程序中使用哪一種方法。
List<T>
MSDN連接
該接口確保您至少獲得了您指望的方法 ; 瞭解接口的定義,即。 全部繼承該接口的類均可以實現的全部抽象方法。 所以,若是有人用他從接口繼承的一些附加功能以外的方法,用幾種方法建立本身的巨大類,而這些方法對您沒有用,那麼最好使用對子類的引用(在這種狀況下,接口)併爲其分配具體的類對象。
另外一個優勢是您的代碼能夠避免對具體類的任何更改,由於您只訂閱具體類的方法中的少數幾個,只要具體類從您所繼承的接口中繼承,這些方法就將存在。使用。 所以它對您來講是安全的,併爲編寫具體實現以更改具體類或爲其添加更多功能的編碼人員提供了自由。
假設這些List vs IList問題(或答案)均未說起簽名差別。 (這就是爲何我在SO上搜索此問題的緣由!)
所以,這裏是List包含的方法,至少在.NET 4.5(大約2015年)中,這些方法在IList中找不到。