【问题标题】:Why is the List Class Implementing IList Interface?为什么List类实现IList接口?
【发布时间】:2019-02-28 04:47:16
【问题描述】:

我的问题可能有点愚蠢,但我真的很想知道为什么集合层次结构的设计方式是包含接口和类,而它可能只是类或顶部的一个接口和其余类。

谁能解释一下原因?

【问题讨论】:

  • 因为IList 不仅仅由List 类实现。另外,C# 不允许多重继承,所以如果你有一个公共抽象类,你就不能从另一个类继承。

标签: c# collections interface


【解决方案1】:

每个类只能派生一个类,但可以派生多个接口。
为什么需要多个接口?
一般来说,一个类有多个接口有两个原因,1。一个类可以有不同类型的行为2。开闭原则
接口的简短定义是:接口是一个实体,它决定派生类的行为方式,由于存在不同类型的行为,我们可能需要为每个类提供不同的接口。
此外,根据 SOLID 的第二条原则,即 Open-Closed Principle 的缩写,这意味着实体必须对扩展开放但对修改关闭,即使您想向特定类添加新行为(例如CanBark)并且你已经有一个相关的接口(@98​​7654322@)作为你的类的父类,建议不要修改IDogActions接口,因为可能有很多其他类实现了这个接口并且不需要新的操作,您可以创建一个新接口(例如IDogAuditoryActions)。

【讨论】:

    【解决方案2】:

    想一想,如果你只定义一个IList 接口,那么你需要类来实现它。 List 就是这样一种实现,如果您愿意,可以使用默认值。

    另一方面,如果您只有一个列表作为抽象类(即没有IList 接口),那么您的所有自定义列表集合类都必须继承。我会说这将是一个糟糕的设计选择,因为IList 的成员更适合合同(各个添加/删除方法可以有不同的实现,例如优先级列表等)。通过将 List 作为抽象类提供,您将强制和控制人们的设计选择。

    同样在 C# 中,您将受到额外限制,不能从任何其他类继承您的自定义集合。

    基本上,您应该尝试查看接口和抽象类提供的不同功能。这会让你意识到 IList 和 List 之间的区别。

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2014-03-08
      • 2011-08-23
      • 1970-01-01
      相关资源
      最近更新 更多