【问题标题】:Why to use interface IList to create an object of List type? [duplicate]为什么要使用接口 IList 来创建 List 类型的对象? [复制]
【发布时间】:2014-05-12 06:57:17
【问题描述】:

为什么这里使用接口Ilist来创建List类型的对象

 IList<BankAccountView> bankAccountViews = new List<BankAccountView>();

什么时候可以这样做

 List<BankAccountView> bankAccountViews = new List<BankAccountView>();

【问题讨论】:

  • 您的问题是关于继承还是特别是关于一个程序员的首选选择?
  • 视情况而定。这个问题没有单一的答案。它是字段还是变量?你在用它做什么?是否有其他地方以不同的方式初始化相同的字段/变量?
  • @Sayse 这是关于继承的
  • 我想知道为什么在 C# 中使用 IList 而不是 List。

标签: c# interface ilist


【解决方案1】:

List 是一种具体类型,而 IList 是一种契约,您可以使用 IList 所具有的任何实现来实现它。

一个 IList 有一组 MSDN 上定义的方法:http://msdn.microsoft.com/en-us/library/system.collections.ilist.aspx

这是一篇非常好的博文,详细解释了它:http://www.claudiobernasconi.ch/2013/07/22/when-to-use-ienumerable-icollection-ilist-and-list/

【讨论】:

    【解决方案2】:

    所以在编写一个接受集合的函数或方法时,不要把它写成接受一个 List,而是一个 IList、一个 ICollection 或 IEnumerable。即使对于异构列表,通用接口仍然有效,因为 System.Object 也可以是 T。如果您决定使用堆栈或其他一些数据结构,那么这样做会让您头疼。如果您在函数中需要做的只是通过它进行 foreach,那么 IEnumerable 确实是您应该要求的全部。

    另一方面,当从函数中返回对象时,您希望为用户提供尽可能丰富的操作集,而无需他们进行强制转换。所以在这种情况下,如果它在内部是一个列表,则返回一个作为列表的副本。

    阅读链接:When to use IList and when to use List

    【讨论】:

    • 谢谢.. 链接很有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 2020-05-14
    相关资源
    最近更新 更多