C# 为什么列表类实现IList接口?

C# 为什么列表类实现IList接口?,c#,collections,interface,C#,Collections,Interface,我的问题可能有点愚蠢,但我真的想知道,为什么集合层次结构的设计方式是包含接口和类,而它可能只是类或顶部的一个接口和rest类 有人能给我解释一下原因吗?想想,如果只定义一个IList接口,那么就需要类来实现它列表就是这样的一种实现,如果您愿意的话,它是默认的 另一方面,如果只有一个列表作为抽象类(即没有IList接口),那么所有自定义列表集合类都必须继承。我认为这是一个糟糕的设计选择,因为IList的成员更适合契约(单个添加/删除方法可以有不同的实现,例如优先级列表等)。通过将列表作为抽象类提供

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


有人能给我解释一下原因吗?

想想,如果只定义一个
IList
接口,那么就需要类来实现它<代码>列表就是这样的一种实现,如果您愿意的话,它是默认的

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

此外,在C#中,您还将受到额外的限制,无法为自定义集合从任何其他类继承


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

想想,如果您只定义了一个
IList
接口,那么您需要类来实现它<代码>列表就是这样的一种实现,如果您愿意的话,它是默认的

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

此外,在C#中,您还将受到额外的限制,无法为自定义集合从任何其他类继承


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

每个类只能从一个类派生,但可以从多个接口派生。
为什么我们需要多个接口?
通常有两个原因导致一个类有多个接口,1。一个类可以有不同类型的行为2。开闭原理
接口的一个简短定义是:接口是一个确定派生类必须如何行为的实体,由于存在不同类型的行为,我们需要为每个类提供可能不同的接口。

此外,根据SOLID的第二个原则,它是开闭原则的缩写,这意味着实体必须为扩展而打开,但为修改而关闭,即使您想向特定类添加新行为(例如,
CanBark
),并且您已经有了相关的接口(
IDogActions
)因此,作为类的父类,建议不要修改
IDogActions
接口,因为可能有许多其他类实现此接口,并且不需要新操作,相反,您可以创建一个新接口(例如
IDogAuditoryActions
).

每个类只能从一个类派生,但可以从多个接口派生。
为什么我们需要多个接口?
通常有两个原因导致一个类有多个接口,1。一个类可以有不同类型的行为2。开闭原理
接口的一个简短定义是:接口是一个确定派生类必须如何行为的实体,由于存在不同类型的行为,我们需要为每个类提供可能不同的接口。

此外,根据SOLID的第二个原则,它是开闭原则的缩写,这意味着实体必须为扩展而打开,但为修改而关闭,即使您想向特定类添加新行为(例如,
CanBark
),并且您已经有了相关的接口(
IDogActions
)因此,作为类的父类,建议不要修改
IDogActions
接口,因为可能有许多其他类实现此接口,并且不需要新操作,相反,您可以创建一个新接口(例如
IDogAuditoryActions
).

因为
IList
不仅仅由
List
类实现。此外,C#不允许多重继承,因此如果您有一个公共抽象类,您也不能从另一个类继承。因为
IList
不仅仅由
List
类实现。另外,C#不允许多重继承,因此如果您有一个公共抽象类,那么您也不能从另一个类继承。