想改善这个问题吗? 更新问题,以便经过编辑此帖子以事实和引用的形式回答。 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中找不到。